diff --git a/.github/workflows/go-build.yaml b/.github/workflows/go-build.yaml new file mode 100644 index 000000000..4511385c1 --- /dev/null +++ b/.github/workflows/go-build.yaml @@ -0,0 +1,185 @@ +# This workflow will build a golang project +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-go + +name: Go + +on: + workflow_dispatch: + release: + types: [published] + push: + branches: + - main + paths: + - "**/*.go" + - "go.mod" + - "go.sum" + - ".github/workflows/*.yml" + + +jobs: + build: + permissions: + contents: write + strategy: + matrix: + # Include amd64 on all platforms. + goos: [windows, freebsd, openbsd, linux, darwin] + goarch: [amd64, 386] + exclude: + # Exclude i386 on darwin. + - 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 & LOONG64 + - goos: linux + goarch: arm64 + - goos: linux + goarch: riscv64 + - goos: linux + goarch: loong64 + # END riscv64 & ARM64 & LOONG64 + # BEGIN MIPS + - goos: linux + goarch: mips64 + - goos: linux + goarch: mips64le + - goos: linux + goarch: mipsle + - goos: linux + goarch: mips + # 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 + # END OPENBSD ARM + fail-fast: false + + runs-on: ubuntu-latest + env: + GOOS: ${{ matrix.goos }} + GOARCH: ${{ matrix.goarch }} + GOARM: ${{ matrix.goarm }} + CGO_ENABLED: 0 + steps: + + - name: Checkout codebase + uses: actions/checkout@v3 + + - name: Show workflow information + run: | + export _NAME=$GOOS-$GOARCH$GOARM$GOMIPS.${GITHUB_SHA::6} + echo "GOOS: $GOOS, GOARCH: $GOARCH, GOARM: $GOARM, GOMIPS: $GOMIPS, RELEASE_NAME: $_NAME" + echo "ASSET_NAME=$_NAME" >> $GITHUB_ENV + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: '1.21' + check-latest: true + + - name: move to warp + run: | + ls + + - name: Build warp + run: | + mkdir -p build_assets + go build -v -o build_assets/warp -trimpath -ldflags "-s -w -buildid=" ./main.go + + - name: Build Mips softfloat warp + if: matrix.goarch == 'mips' || matrix.goarch == 'mipsle' + run: | + GOMIPS=softfloat go build -v -o build_assets/warp_softfloat -trimpath -ldflags "-s -w -buildid=" ./main.go + + - name: Rename Windows warp + if: matrix.goos == 'windows' + run: | + cd ./build_assets || exit 1 + mv warp warp.exe + + - name: Copy README.md & LICENSE + run: | + cp ${GITHUB_WORKSPACE}/README.md ./build_assets/README.md + cp ${GITHUB_WORKSPACE}/LICENSE ./build_assets/LICENSE + + - name: Create ZIP archive + shell: bash + run: | + pushd ./build_assets || exit 1 + touch -mt $(date +%Y01010000) * + zip -9vr ../warp-${{ env.ASSET_NAME }}.zip . + popd || exit 1 + FILE=./warp-${{ env.ASSET_NAME }}.zip + DGST=$FILE.dgst + for METHOD in {"md5","sha1","sha256","sha512"} + do + openssl dgst -$METHOD $FILE | sed 's/([^)]*)//g' >>$DGST + done + + - name: Change the name + run: | + mv ./build_assets ./warp-${{ env.ASSET_NAME }} + + - name: Upload files to Artifacts + uses: actions/upload-artifact@v3 + with: + name: warp-${{ env.ASSET_NAME }} + path: | + ./warp-${{ env.ASSET_NAME }}/* + + - name: Upload binaries to release + uses: svenstaro/upload-release-action@v2 + if: github.event_name == 'release' + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ./warp-${{ env.ASSET_NAME }}.zip* + tag: ${{ github.ref }} + file_glob: true