From d603fe12383381ebcf53b1ad5e50ab0a5652d485 Mon Sep 17 00:00:00 2001 From: tsosunchia <59512455+tsosunchia@users.noreply.github.com> Date: Sat, 14 Oct 2023 19:46:11 +0800 Subject: [PATCH] CI/CD --- .cross_compile.sh | 49 +++++++++++ .github/dependabot.yml | 15 ++++ .github/workflows/build.yml | 159 ++++++++++++++++++++++++++++++++++++ .gitignore | 1 + 4 files changed, 224 insertions(+) create mode 100644 .cross_compile.sh create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/build.yml diff --git a/.cross_compile.sh b/.cross_compile.sh new file mode 100644 index 0000000..6172805 --- /dev/null +++ b/.cross_compile.sh @@ -0,0 +1,49 @@ +#!/usr/bin/env bash + +set -e + +DIST_PREFIX="wscat-go" +DEBUG_MODE=${2} +TARGET_DIR="dist" +PLATFORMS="darwin/amd64 darwin/arm64 linux/386 linux/amd64 linux/arm64 linux/mips linux/mips64 linux/mipsle linux/mips64le windows/amd64 windows/arm64 openbsd/amd64 openbsd/arm64 freebsd/amd64 freebsd/arm64" + +BUILD_VERSION="$(git describe --tags --always)" +BUILD_DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" +COMMIT_SHA1="$(git rev-parse --short HEAD)" + +rm -rf ${TARGET_DIR} +mkdir ${TARGET_DIR} + +for pl in ${PLATFORMS}; do + export CGO_ENABLED=0 + export GOOS=$(echo ${pl} | cut -d'/' -f1) + export GOARCH=$(echo ${pl} | cut -d'/' -f2) + export TARGET=${TARGET_DIR}/${DIST_PREFIX}_${GOOS}_${GOARCH} + if [ "${GOOS}" == "windows" ]; then + export TARGET=${TARGET_DIR}/${DIST_PREFIX}_${GOOS}_${GOARCH}.exe + fi + + echo "build => ${TARGET}" + if [ "${DEBUG_MODE}" == "debug" ]; then + go build -trimpath -gcflags "all=-N -l" -o ${TARGET} \ + -ldflags "-w -s" + else + go build -trimpath -o ${TARGET} \ + -ldflags "-w -s" + fi +done + export CGO_ENABLED=0 + export GOOS='linux' + export GOARCH='arm' + export GOARM='7' + export TARGET=${TARGET_DIR}/${DIST_PREFIX}_${GOOS}_${GOARCH}v7 + echo "build => ${TARGET}" + if [ "${DEBUG_MODE}" == "debug" ]; then + go build -trimpath -gcflags "all=-N -l" -o ${TARGET} \ + -ldflags "-w -s" + else + go build -trimpath -o ${TARGET} \ + -ldflags "-w -s" + fi + + diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..6cd4fd2 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,15 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "gomod" + directory: "/" # Location of package manifests + schedule: + interval: "weekly" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..a73c80d --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,159 @@ +name: Build & Release + +on: + workflow_dispatch: + push: + branches: + - main + tags: + - "v*" + paths: + - "**/*.go" + - "go.mod" + - "go.sum" + - ".github/workflows/*.yml" + pull_request: + types: [opened, synchronize, reopened] + paths: + - "**/*.go" + - "go.mod" + - "go.sum" + - ".github/workflows/*.yml" +jobs: + build: + runs-on: ubuntu-latest + strategy: + matrix: + # Include amd64 on all platforms. + goos: [windows, freebsd, openbsd, linux, dragonfly, darwin] + goarch: [amd64, 386] + exclude: + # Exclude i386 on darwin and dragonfly. + - goarch: 386 + goos: dragonfly + - goarch: 386 + goos: darwin + include: + # BEIGIN MacOS ARM64 + - goos: darwin + goarch: arm64 + # END macOS ARM64 + # BEGIN Linux ARM 5 6 7 + - goos: linux + goarch: arm + goarm: 7 + - goos: linux + goarch: arm + goarm: 6 + - goos: linux + goarch: arm + goarm: 5 + # END Linux ARM 5 6 7 + # BEGIN Android ARM 8 + - goos: android + goarch: arm64 + # END Android ARM 8 + # Windows ARM + - goos: windows + goarch: arm64 + - goos: windows + goarch: arm + goarm: 7 + # BEGIN Other architectures + # BEGIN riscv64 & ARM64 + - goos: linux + goarch: arm64 + - goos: linux + goarch: riscv64 + # END riscv64 & ARM64 + # BEGIN MIPS + - goos: linux + goarch: mips64 + - goos: linux + goarch: mips64le + - goos: linux + goarch: mipsle + - goos: linux + goarch: mips + - goos: linux + goarch: mipsle + gomips: softfloat + - goos: linux + goarch: mips + gomips: softfloat + # END MIPS + # BEGIN PPC + - goos: linux + goarch: ppc64 + - goos: linux + goarch: ppc64le + # END PPC + # BEGIN FreeBSD ARM + - goos: freebsd + goarch: arm64 + - goos: freebsd + goarch: arm + goarm: 7 + # END FreeBSD ARM + # BEGIN S390X + - goos: linux + goarch: s390x + # END S390X + # END Other architectures + # BEGIN OPENBSD ARM + - goos: openbsd + goarch: arm64 + - goos: openbsd + goarch: arm + goarm: 7 + env: + GOOS: ${{ matrix.goos }} + GOARCH: ${{ matrix.goarch }} + GOARM: ${{ matrix.goarm }} + GOMIPS: ${{ matrix.gomips }} + CGO_ENABLED: 0 + steps: + - name: Checkout codebase + uses: actions/checkout@v4 + - name: Show workflow information + run: | + if [ ! -z $GOARM ]; then + export GOARM=v$GOARM + fi + export _NAME="nexttrace_${GOOS}_${GOARCH}${GOARM}" + if [ "$GOOS" == "windows" ]; then + export _NAME="$_NAME.exe" + fi + if [ "$GOMIPS" == "softfloat" ]; then + export _NAME="${_NAME}_softfolat" + fi + echo "GOOS: $GOOS, GOARCH: $GOARCH, GOARM: $GOARM, GOMIPS: $GOMIPS, RELEASE_NAME: $_NAME" + echo "ASSET_NAME=$_NAME" >> $GITHUB_ENV + echo "BUILD_VERSION=$(git describe --tags --always)" >> $GITHUB_ENV + echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_ENV + echo "COMMIT_SHA1=$(git rev-parse --short HEAD)" >> $GITHUB_ENV + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: '1.21' + - name: Get project dependencies + run: go mod download + - name: Build + run: | + go build -trimpath -o dist/${ASSET_NAME} \ + -ldflags "-w -s" + - name: Upload files to Artifacts + uses: actions/upload-artifact@v3 + with: + name: ${{ env.ASSET_NAME }} + path: | + dist/${{ env.ASSET_NAME }} + - name: Release + if: startsWith(github.ref, 'refs/tags/v') + uses: softprops/action-gh-release@v1 + with: # 将下述可执行文件 release 上去 + draft: true # Release草稿 + files: | + dist/* + env: + GITHUB_TOKEN: ${{ secrets.GT_Token }} diff --git a/.gitignore b/.gitignore index 371086c..93afbb2 100644 --- a/.gitignore +++ b/.gitignore @@ -79,4 +79,5 @@ fabric.properties wscat-go .idea +dist