From 6174ff5f65920af961c7aacb0d6263661e0d08d7 Mon Sep 17 00:00:00 2001 From: PA733 Date: Fri, 4 Apr 2025 00:01:29 +0800 Subject: [PATCH 01/11] feat: GitHub actions --- .github/workflows/build.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..f6e36b6 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,28 @@ +name: Build and Upload + +on: + push: + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: 1.23.3 + + - name: Build + run: | + go build -o super-sms-bridge ./cmd/super-sms-bridge + + - name: Upload Build Artifact + uses: actions/upload-artifact@v3 + with: + name: super-sms-bridge + path: super-sms-bridge From 7790753ab84563c762858b8dc8925092edbd1981 Mon Sep 17 00:00:00 2001 From: PA733 Date: Fri, 4 Apr 2025 00:08:24 +0800 Subject: [PATCH 02/11] fix: deprecated actions step --- .github/workflows/build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f6e36b6..4e2e653 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,10 +10,10 @@ jobs: steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set up Go - uses: actions/setup-go@v3 + uses: actions/setup-go@v5 with: go-version: 1.23.3 @@ -22,7 +22,7 @@ jobs: go build -o super-sms-bridge ./cmd/super-sms-bridge - name: Upload Build Artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: super-sms-bridge path: super-sms-bridge From 89844f2a129a7dbbec59b9f2196f74e6472214f0 Mon Sep 17 00:00:00 2001 From: PA733 Date: Fri, 4 Apr 2025 00:11:57 +0800 Subject: [PATCH 03/11] feat: multi OS & arch support --- .github/workflows/build.yml | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4e2e653..fc1b287 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,7 +6,16 @@ on: jobs: build: - runs-on: ubuntu-latest + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + arch: [amd64, arm64, 386] + mode: [debug, release] + exclude: + # Go does not support 386 on macOS + - os: macos-latest + arch: 386 steps: - name: Checkout code @@ -17,12 +26,25 @@ jobs: with: go-version: 1.23.3 + - name: Set environment variables + run: | + echo "GOARCH=${{ matrix.arch }}" >> $GITHUB_ENV + echo "GOOS=$(echo ${{ matrix.os }} | cut -d'-' -f1)" >> $GITHUB_ENV + if [ "${{ matrix.mode }}" = "release" ]; then + echo "GOBUILD_FLAGS=-ldflags='-s -w'" >> $GITHUB_ENV + else + echo "GOBUILD_FLAGS=" >> $GITHUB_ENV + fi + shell: bash + - name: Build run: | - go build -o super-sms-bridge ./cmd/super-sms-bridge + mkdir -p dist/${{ matrix.os }}/${{ matrix.arch }}/${{ matrix.mode }} + go build $GOBUILD_FLAGS -o dist/${{ matrix.os }}/${{ matrix.arch }}/${{ matrix.mode }}/super-sms-bridge ./cmd/super-sms-bridge + shell: bash - name: Upload Build Artifact uses: actions/upload-artifact@v4 with: - name: super-sms-bridge - path: super-sms-bridge + name: super-sms-bridge-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.mode }} + path: dist/${{ matrix.os }}/${{ matrix.arch }}/${{ matrix.mode }}/super-sms-bridge From 7e347ae763bb15d4f3d1a0cdef6cd368c02e5162 Mon Sep 17 00:00:00 2001 From: PA733 Date: Fri, 4 Apr 2025 00:13:40 +0800 Subject: [PATCH 04/11] fix: go build failed --- .github/workflows/build.yml | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fc1b287..1b394fe 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,7 +13,6 @@ jobs: arch: [amd64, arm64, 386] mode: [debug, release] exclude: - # Go does not support 386 on macOS - os: macos-latest arch: 386 @@ -26,25 +25,20 @@ jobs: with: go-version: 1.23.3 - - name: Set environment variables - run: | - echo "GOARCH=${{ matrix.arch }}" >> $GITHUB_ENV - echo "GOOS=$(echo ${{ matrix.os }} | cut -d'-' -f1)" >> $GITHUB_ENV - if [ "${{ matrix.mode }}" = "release" ]; then - echo "GOBUILD_FLAGS=-ldflags='-s -w'" >> $GITHUB_ENV - else - echo "GOBUILD_FLAGS=" >> $GITHUB_ENV - fi - shell: bash - - name: Build run: | mkdir -p dist/${{ matrix.os }}/${{ matrix.arch }}/${{ matrix.mode }} - go build $GOBUILD_FLAGS -o dist/${{ matrix.os }}/${{ matrix.arch }}/${{ matrix.mode }}/super-sms-bridge ./cmd/super-sms-bridge + FLAGS="" + if [ "${{ matrix.mode }}" = "release" ]; then + FLAGS="-ldflags=-s -w" + fi + GOOS=$(echo ${{ matrix.os }} | cut -d'-' -f1) + GOARCH=${{ matrix.arch }} + GOOS=$GOOS GOARCH=$GOARCH go build $FLAGS -o dist/${{ matrix.os }}/${{ matrix.arch }}/${{ matrix.mode }}/super-sms-bridge ./cmd/super-sms-bridge shell: bash - name: Upload Build Artifact uses: actions/upload-artifact@v4 with: name: super-sms-bridge-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.mode }} - path: dist/${{ matrix.os }}/${{ matrix.arch }}/${{ matrix.mode }}/super-sms-bridge + path: dist/${{ matrix.os }}/${{ matrix.arch }}/${{ matrix.mode }}/super-sms-bridge \ No newline at end of file From ec8b199f8b2cba44b3da2e10400b40eb2517cd6f Mon Sep 17 00:00:00 2001 From: PA733 Date: Fri, 4 Apr 2025 00:15:28 +0800 Subject: [PATCH 05/11] fix: wrong GOOS when building --- .github/workflows/build.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 1b394fe..ee18ff3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -32,7 +32,13 @@ jobs: if [ "${{ matrix.mode }}" = "release" ]; then FLAGS="-ldflags=-s -w" fi - GOOS=$(echo ${{ matrix.os }} | cut -d'-' -f1) + + case "${{ matrix.os }}" in + ubuntu-latest) GOOS=linux ;; + windows-latest) GOOS=windows ;; + macos-latest) GOOS=darwin ;; + esac + GOARCH=${{ matrix.arch }} GOOS=$GOOS GOARCH=$GOARCH go build $FLAGS -o dist/${{ matrix.os }}/${{ matrix.arch }}/${{ matrix.mode }}/super-sms-bridge ./cmd/super-sms-bridge shell: bash @@ -41,4 +47,4 @@ jobs: uses: actions/upload-artifact@v4 with: name: super-sms-bridge-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.mode }} - path: dist/${{ matrix.os }}/${{ matrix.arch }}/${{ matrix.mode }}/super-sms-bridge \ No newline at end of file + path: dist/${{ matrix.os }}/${{ matrix.arch }}/${{ matrix.mode }}/super-sms-bridge From e5568e45ddec7f254df0dd74f78dc55a7ceae872 Mon Sep 17 00:00:00 2001 From: PA733 Date: Fri, 4 Apr 2025 00:35:33 +0800 Subject: [PATCH 06/11] refactor: use gorelease --- .github/workflows/build.yml | 52 +++++++++++++++++-------------------- .gitignore | 3 +++ .goreleaser.yaml | 44 +++++++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 28 deletions(-) create mode 100644 .goreleaser.yaml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ee18ff3..60bff41 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,20 +1,16 @@ -name: Build and Upload +name: Build and Release on: push: + tags: + - 'v*' + branches: + - '**' pull_request: jobs: build: - runs-on: ${{ matrix.os }} - strategy: - matrix: - os: [ubuntu-latest, windows-latest, macos-latest] - arch: [amd64, arm64, 386] - mode: [debug, release] - exclude: - - os: macos-latest - arch: 386 + runs-on: ubuntu-latest steps: - name: Checkout code @@ -25,26 +21,26 @@ jobs: with: go-version: 1.23.3 - - name: Build + - name: Install GoReleaser + uses: goreleaser/goreleaser-action@v5 + with: + version: latest + + - name: Build or Release run: | - mkdir -p dist/${{ matrix.os }}/${{ matrix.arch }}/${{ matrix.mode }} - FLAGS="" - if [ "${{ matrix.mode }}" = "release" ]; then - FLAGS="-ldflags=-s -w" + if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then + echo "📦 Releasing version ${GITHUB_REF_NAME}" + goreleaser release --clean + else + echo "🔨 Building snapshot (no release)" + goreleaser build --clean --snapshot fi + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - case "${{ matrix.os }}" in - ubuntu-latest) GOOS=linux ;; - windows-latest) GOOS=windows ;; - macos-latest) GOOS=darwin ;; - esac - - GOARCH=${{ matrix.arch }} - GOOS=$GOOS GOARCH=$GOARCH go build $FLAGS -o dist/${{ matrix.os }}/${{ matrix.arch }}/${{ matrix.mode }}/super-sms-bridge ./cmd/super-sms-bridge - shell: bash - - - name: Upload Build Artifact + - name: Upload Artifacts (for non-tag builds) + if: ${{ github.ref_type != 'tag' }} uses: actions/upload-artifact@v4 with: - name: super-sms-bridge-${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.mode }} - path: dist/${{ matrix.os }}/${{ matrix.arch }}/${{ matrix.mode }}/super-sms-bridge + name: built-binaries + path: dist/* diff --git a/.gitignore b/.gitignore index d211cde..71f3c66 100644 --- a/.gitignore +++ b/.gitignore @@ -31,3 +31,6 @@ config.yaml # Data directory data/ + +# goreleaser +dist/ diff --git a/.goreleaser.yaml b/.goreleaser.yaml new file mode 100644 index 0000000..b867565 --- /dev/null +++ b/.goreleaser.yaml @@ -0,0 +1,44 @@ +# .goreleaser.yaml + +# 项目名称 +project_name: my-project + +# 编译配置 +builds: + - id: default + main: ./cmd/my-project # 主入口目录,根据实际情况调整 + binary: my-project # 输出二进制名称 + goos: + - linux + - darwin + - windows + goarch: + - amd64 + - arm64 + env: + - CGO_ENABLED=0 + ldflags: "-s -w" # 可根据需求自定义 ldflags + +# 打包配置 +archives: + - id: default + format: zip # 打包格式,可选 tar.gz 等 + name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}" + files: + - LICENSE # 可以添加其他需要随发行版打包的文件 + - README.md + +# 校验和文件(可选) +checksum: + name_template: "{{ .ProjectName }}_{{ .Version }}_checksums.txt" + +# 发布到 GitHub Releases 的配置 +release: + github: + owner: your-github-username # 请替换为你的 GitHub 用户名或组织名 + name: your-repo-name # 请替换为你的仓库名称 + +# 快照(非 tag 构建)配置 +# 当使用 --snapshot 参数时,goreleaser 不会发布 release,仅生成快照产物供后续上传到 artifacts +snapshot: + name_template: "{{ .Tag }}-dev" From 59c0a4d0f6c52011a8c189ddd53a6ff9e34438db Mon Sep 17 00:00:00 2001 From: PA733 Date: Fri, 4 Apr 2025 00:39:01 +0800 Subject: [PATCH 07/11] fix: args required --- .github/workflows/build.yml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 60bff41..3981619 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -21,20 +21,19 @@ jobs: with: go-version: 1.23.3 - - name: Install GoReleaser + - name: Build + if: ${{ github.ref_type != 'tag' }} uses: goreleaser/goreleaser-action@v5 with: version: latest + args: build --clean --snapshot - - name: Build or Release - run: | - if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then - echo "📦 Releasing version ${GITHUB_REF_NAME}" - goreleaser release --clean - else - echo "🔨 Building snapshot (no release)" - goreleaser build --clean --snapshot - fi + - name: Build + if: ${{ github.ref_type == 'tag' }} + uses: goreleaser/goreleaser-action@v5 + with: + version: latest + args: release --clean env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 14f020e1abab7345fe9b81cdc5e867b96653b323 Mon Sep 17 00:00:00 2001 From: PA733 Date: Fri, 4 Apr 2025 00:41:13 +0800 Subject: [PATCH 08/11] fix: place args in goreleaser yaml --- .goreleaser.yaml | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index b867565..52976a6 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -1,13 +1,11 @@ # .goreleaser.yaml -# 项目名称 -project_name: my-project +project_name: super-sms-bridge -# 编译配置 builds: - id: default - main: ./cmd/my-project # 主入口目录,根据实际情况调整 - binary: my-project # 输出二进制名称 + main: ./cmd/super-sms-bridge + binary: super-sms-bridge goos: - linux - darwin @@ -17,28 +15,23 @@ builds: - arm64 env: - CGO_ENABLED=0 - ldflags: "-s -w" # 可根据需求自定义 ldflags + ldflags: "-s -w" -# 打包配置 archives: - id: default - format: zip # 打包格式,可选 tar.gz 等 + format: zip name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}" files: - - LICENSE # 可以添加其他需要随发行版打包的文件 + - LICENSE - README.md -# 校验和文件(可选) checksum: name_template: "{{ .ProjectName }}_{{ .Version }}_checksums.txt" -# 发布到 GitHub Releases 的配置 release: github: - owner: your-github-username # 请替换为你的 GitHub 用户名或组织名 - name: your-repo-name # 请替换为你的仓库名称 + owner: PA733 + name: SuperSMSBridge -# 快照(非 tag 构建)配置 -# 当使用 --snapshot 参数时,goreleaser 不会发布 release,仅生成快照产物供后续上传到 artifacts snapshot: name_template: "{{ .Tag }}-dev" From ff309912063a16820ac3bdcaebdccf79c662a595 Mon Sep 17 00:00:00 2001 From: PA733 Date: Fri, 4 Apr 2025 01:02:09 +0800 Subject: [PATCH 09/11] style: remove useless comment --- .goreleaser.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 52976a6..f15d974 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -1,5 +1,3 @@ -# .goreleaser.yaml - project_name: super-sms-bridge builds: From 523ef936dbafc52efd49c7013b1a6becde10ca33 Mon Sep 17 00:00:00 2001 From: PA733 Date: Fri, 4 Apr 2025 01:08:53 +0800 Subject: [PATCH 10/11] fix: grant permission --- .github/workflows/build.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3981619..24fe855 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -8,6 +8,11 @@ on: - '**' pull_request: +permissions: + contents: write + id-token: write + packages: write + jobs: build: runs-on: ubuntu-latest From 057061a3f890fbb2d1cbe3b1325d2ace0a9a5da2 Mon Sep 17 00:00:00 2001 From: PA733 Date: Fri, 4 Apr 2025 01:14:25 +0800 Subject: [PATCH 11/11] fix: add config.example.yaml in package --- .goreleaser.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.goreleaser.yaml b/.goreleaser.yaml index f15d974..fafccc2 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -22,6 +22,7 @@ archives: files: - LICENSE - README.md + - config.example.yaml checksum: name_template: "{{ .ProjectName }}_{{ .Version }}_checksums.txt"