name: Test on: push: pull_request: workflow_dispatch: inputs: short-integration-tests: description: 'Run only short integration tests' required: false default: false type: boolean jobs: nix-env: name: Initialize Nix runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install Nix packages uses: diamondburned/cache-install@main generate: name: Generate needs: [nix-env] runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install Nix packages uses: diamondburned/cache-install@main - name: Generate run: | go generate ./... if ! git diff --exit-code; then if [[ $GITHUB_REF == refs/heads/main ]]; then echo '::error::Repository differ after `go generate`.' exit 1 else # Don't bother failing on non-main branches and PRs. echo '::warning::Repository differ after `go generate`.' fi fi env: GITHUB_REF: ${{ github.ref }} build: name: Build runs-on: ubuntu-latest needs: [generate] steps: - uses: actions/checkout@v2 - name: Install Nix packages uses: diamondburned/cache-install@main - name: Build run: go build ./... unit-test: name: Unit Test runs-on: ubuntu-latest needs: [build] steps: - uses: actions/checkout@v2 - name: Install Nix packages uses: diamondburned/cache-install@main - name: Test run: go test $TEST_FLAGS ./... env: TEST_FLAGS: >- -v=${{ runner.debug && '1' || '0' }} integration-test: name: Integration Test concurrency: integration-test runs-on: ubuntu-latest needs: [build] steps: - uses: actions/checkout@v2 - name: Install Nix packages uses: diamondburned/cache-install@main - name: Test run: | go test -coverprofile /tmp/coverage.out -race $TEST_FLAGS ./... go tool cover -func /tmp/coverage.out env: TEST_FLAGS: >- -v=${{ runner.debug && '1' || '0' }} -short=${{ (github.event-name == 'workflow_dispatch' && !github.event.inputs.short-integration-tests) && '0' || '1' }} CHANNEL_ID: ${{ secrets.CHANNEL_ID }} GUILD_ID: ${{ secrets.GUILD_ID }} VOICE_ID: ${{ secrets.VOICE_ID }} BOT_TOKEN: ${{ secrets.BOT_TOKEN }} - name: Upload coverage profile uses: actions/upload-artifact@v3 with: name: coverage path: /tmp/coverage.out