diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 8a0e21f79..8b31f8115 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -40,6 +40,24 @@ jobs: GOARCH: amd64 run: go build ./cmd/... - - name: Test build + - name: Cross-compile tests for other geese + run: ./test.sh + + - name: Run tests on linux run: go test ./... + - uses: k0kubun/action-slack@v2.0.0 + with: + payload: | + { + "attachments": [{ + "text": "${{ job.status }}: ${{ github.workflow }} " + + "() " + + "of ${{ github.repository }}@" + "${{ github.ref }}".split('/').reverse()[0] + " by ${{ github.event.head_commit.committer.name }}", + "color": "danger" + }] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + if: failure() && github.event_name == 'push' + diff --git a/test.sh b/test.sh new file mode 100755 index 000000000..3c8af9794 --- /dev/null +++ b/test.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash + +function remove_test_files { + rm -f ./*test{,.exe} +} + +function fail { + printf '%s\n' "$1" >&2 + # If we fail, clean up after ourselves + remove_test_files + exit 1 +} + +function main { + test_dirs=() + while IFS= read -r -d '' file + do + dir=$(dirname "$file") + if [[ ! " ${test_dirs[*]} " =~ ${dir} ]]; then + test_dirs+=("$dir") + fi + done < <(find . -type f -iname '*_test.go' -print0) + + for goos in openbsd darwin windows + do + for dir in "${test_dirs[@]}"; do + echo "Testing GOOS=$goos in dir $dir" + GOOS="$goos" go test -c "./$dir" || fail "Test failed using $goos and $dir" + done + done + + # If all goes well, we should still clean up the test files + echo "Test complete" + remove_test_files +} + +main "$@" +