name: Build and Release on: push: branches: [ main ] pull_request: branches: [ main ] release: types: [published] 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 ./... build-binary: name: Build 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 run: | mkdir -p bin cd cmd go build -o ../bin/backtrace-${{ matrix.goos }}-${{ matrix.goarch }} -v . strategy: matrix: goos: [windows, freebsd, openbsd, linux, darwin] goarch: [amd64, 386] exclude: - goarch: 386 goos: darwin include: - goos: darwin goarch: arm64 - goos: linux goarch: arm goarm: 7 - goos: linux goarch: arm goarm: 6 - goos: linux goarch: arm goarm: 5 - goos: android goarch: arm64 - goos: windows goarch: arm64 - goos: windows 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: mipsle gomips: softfloat - goos: linux goarch: mips gomips: softfloat - 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 release-binary: - name: Check, Delete Existing Assets and Upload New Assets run: | release_id=$(curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" "https://api.github.com/repos/oneclickvirt/backtrace/releases/tags/output" | jq -r '.id') echo "Checking, deleting existing assets, and uploading new assets..." for file in ./bin/*; do echo "Processing file: $file" existing_asset_id=$(curl -s -H "Accept: application/vnd.github.v3+json" \ "https://api.github.com/repos/oneclickvirt/backtrace/releases/$release_id/assets" \ | jq -r --arg name "$(basename "$file")" '.[] | select(.name == $name) | .id') if [ -n "$existing_asset_id" ]; then echo "Asset already exists in release, deleting existing asset..." delete_response=$(curl -s -X DELETE -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" "https://api.github.com/repos/oneclickvirt/backtrace/releases/assets/$existing_asset_id") echo "$delete_response" if [ $? -eq 0 ] && ! echo "$delete_response" | grep -q "error"; then echo "Existing asset deleted successfully." else echo "Failed to delete existing asset. Skipping file upload..." continue fi else echo "No existing asset found." fi echo "Uploading $file to release..." curl -s -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ -H "Content-Type: application/zip" \ --data-binary @"$file" \ "https://uploads.github.com/repos/oneclickvirt/backtrace/releases/$release_id/assets?name=$(basename "$file")" rm -rf $file done