# Copyright 2023 LiveKit, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. name: Test permissions: contents: read on: workflow_dispatch: push: branches: [master] pull_request: branches: [master] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7 - uses: shogo82148/actions-setup-redis@2f3253b148c73d7a0682eae73e862b777a4fa74e # v1 with: redis-version: "6.x" auto-start: true - run: redis-cli ping # Test with the same Go toolchain the published image is built with - name: Resolve Go version id: go-version run: | # Assign first so a failed lookup trips `set -e`; inside echo its exit # status would be discarded and an empty version written. version=$(.github/scripts/go-version.sh Dockerfile) echo "version=$version" >> "$GITHUB_OUTPUT" - name: Set up Go uses: actions/setup-go@b7ad1dad31e06c5925ef5d2fc7ad053ef454303e # v7 with: go-version: ${{ steps.go-version.outputs.version }} - name: Replace mutexes run: | go get github.com/sasha-s/go-deadlock grep -rl sync.Mutex ./pkg | xargs sed -i 's/sync\.Mutex/deadlock\.Mutex/g' grep -rl sync.RWMutex ./pkg | xargs sed -i 's/sync\.RWMutex/deadlock\.RWMutex/g' grep -rl deadlock.Mutex ./pkg | xargs go tool goimports -w grep -rl deadlock.RWMutex ./pkg | xargs go tool goimports -w go mod tidy # Run mage at the version go.mod pins, rather than the mage-action's # `version: latest`, so the binary matches the mage/mg library the magefile is # compiled against and Renovate owns the version like any other module. - name: Mage Build run: go run github.com/magefile/mage build - name: Lint uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9.2.0 with: version: v2.11.4 - name: Test run: | set -euo pipefail MallocNanoZone=0 go test -race -json -v ./... 2>&1 | tee /tmp/gotest.log | go tool gotestfmt # Upload the original go test log as an artifact for later review. - name: Upload test log uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 if: always() with: name: test-log path: /tmp/gotest.log if-no-files-found: error