#2203·reviewdog

Failed to send to Bitbucket when using multiple runners

Author: RekwianCreated Aug 13, 2025Updated Aug 13, 2025

Hello,

When I try to send analysis results to Bitbucket from multiple runners in reviewdog, it crashes with a panic error.

.reviewdog.yaml

yaml
runner:
  phpcs:
    name: phpcs
    format: checkstyle
    cmd: /app/vendor/bin/phpcs --report=checkstyle $(cat diff-list.txt | grep .php)
  phpstan:
    name: phpstan
    format: checkstyle
    cmd: '/app/vendor/bin/phpstan analyse --error-format=checkstyle --no-progress $(cat diff-list.txt | grep .php)'

CI step for Reviewdog (woodpecker)

yaml
    commands:
      - cd /app
      - git config --global --add safe.directory /app
      - mkdir -p ~/.ssh
      - echo "$BITBUCKET_SSH" > ~/.ssh/id_ed25519
      - chmod 600 ~/.ssh/id_ed25519
      - git remote set-url origin ${CI_REPO_CLONE_SSH_URL}
      - git fetch origin ${CI_COMMIT_TARGET_BRANCH} ${CI_COMMIT_SOURCE_BRANCH}
      - wget -O - -q https://raw.githubusercontent.com/reviewdog/reviewdog/fd59714416d6d9a1c0692d872e38e7f8448df4fc/install.sh | sh -s - -b /app
      - git diff --diff-filter=ACM --name-only origin/${CI_COMMIT_TARGET_BRANCH}...origin/${CI_COMMIT_SOURCE_BRANCH} > diff-list.txt
      - /app/reviewdog -reporter=bitbucket-code-report -fail-level=any -fail-level=any -tee
    environment:
      GIT_SSH_COMMAND: ssh -o StrictHostKeyChecking=no
      BITBUCKET_ACCESS_TOKEN:
        from_secret: bitbucket_access_token
      BITBUCKET_SSH:
        from_secret: bitbucket_ssh

Observed behavior When running with two runners (phpcs then phpstan), the first runner works fine, but the second causes Reviewdog to panic when posting results to Bitbucket.

Output (truncated)

+ /app/reviewdog -reporter=bitbucket-code-report -fail-level=any -fail-level=any -tee
time=2025-08-13T09:39:29.787+02:00 level=INFO msg="reviewdog: [start] runner=phpcs"
<?xml version="1.0" encoding="UTF-8"?>
<checkstyle version="3.7.2">
</checkstyle>
time=2025-08-13T09:39:30.067+02:00 level=INFO msg="reviewdog: [finish] runner=phpcs"
time=2025-08-13T09:39:30.067+02:00 level=INFO msg="reviewdog: [start] runner=phpstan"
<?xml version="1.0" encoding="UTF-8"?>
<checkstyle>
<file name="src/Entity/Lead/Project.php">
  <error line="110" column="1" severity="error" message="Property App\Entity\Lead\Project::$lead has no type specified." source="missingType.property" />
  <error line="194" column="1" severity="error" message="Property App\Entity\Lead\Project::$rawData type has no value type specified in iterable type array." source="missingType.iterableValue" />
  <error line="197" column="1" severity="error" message="Property App\Entity\Lead\Project::$transitions type has no value type specified in iterable type array." source="missingType.iterableValue" />
  <error line="204" column="1" severity="error" message="Property App\Entity\Lead\Project::$extraData type has no value type specified in iterable type array." source="missingType.iterableValue" />
  <error line="211" column="1" severity="error" message="Property App\Entity\Lead\Project::$notes with generic interface Doctrine\Common\Collections\Collection does not specify its types: TKey, T" source="missingType.generics" />
  <error line="224" column="1" severity="error" message="Method App\Entity\Lead\Project::doPropertyDetailsPostLoad() has no return type specified." source="missingType.return" />
  <error line="270" column="1" severity="error" message="Property App\Entity\Lead\Project::$type (string) on left side of ?? is not nullable." source="nullCoalesce.property" />
  <error line="287" column="1" severity="error" message="Property App\Entity\Lead\Project::$address (string) does not accept string|null." source="assign.propertyType" />
  <error line="316" column="1" severity="error" message="Method App\Entity\Lead\Project::getFeedbackSurveySend() has no return type specified." source="missingType.return" />
  <error line="321" column="1" severity="error" message="Method App\Entity\Lead\Project::setFeedbackSurveySend() has no return type specified." source="missingType.return" />
  <error line="321" column="1" severity="error" message="Method App\Entity\Lead\Project::setFeedbackSurveySend() has parameter $feedbackSurveySend with no type specified." source="missingType.parameter" />
  <error line="400" column="1" severity="error" message="Method App\Entity\Lead\Project::getRawData() return type has no value type specified in iterable type array." source="missingType.iterableValue" />
  <error line="405" column="1" severity="error" message="Method App\Entity\Lead\Project::setRawData() has parameter $rawData with no value type specified in iterable type array." source="missingType.iterableValue" />
  <error line="446" column="1" severity="error" message="Property App\Entity\Lead\Project::$externalId (string) does not accept string|null." source="assign.propertyType" />
  <error line="451" column="1" severity="error" message="Method App\Entity\Lead\Project::getTransitions() return type has no value type specified in iterable type array." source="missingType.iterableValue" />
  <error line="456" column="1" severity="error" message="Method App\Entity\Lead\Project::setTransitions() has parameter $transitions with no value type specified in iterable type array." source="missingType.iterableValue" />
  <error line="463" column="1" severity="error" message="Method App\Entity\Lead\Project::getSourceIds() return type has no value type specified in iterable type array." source="missingType.iterableValue" />
  <error line="468" column="1" severity="error" message="Method App\Entity\Lead\Project::getExtraData() return type has no value type specified in iterable type array." source="missingType.iterableValue" />
  <error line="476" column="1" severity="error" message="Method App\Entity\Lead\Project::setExtraData() has parameter $extraData with no value type specified in iterable type array." source="missingType.iterableValue" />
  <error line="483" column="1" severity="error" message="Method App\Entity\Lead\Project::getNotes() return type with generic interface Doctrine\Common\Collections\Collection does not specify its types: TKey, T" source="missingType.generics" />
  <error line="488" column="1" severity="error" message="Method App\Entity\Lead\Project::setNotes() has parameter $notes with generic interface Doctrine\Common\Collections\Collection but does not specify its types: TKey, T" source="missingType.generics" />
  <error line="507" column="1" severity="error" message="Parameter $string of function strtolower expects string, string|null given." source="argument.type" />
</file>
</checkstyle>
time=2025-08-13T09:39:33.881+02:00 level=INFO msg="reviewdog: [finish] runner=phpstan\terror=exit status 1"
panic: assignment to entry in nil map

goroutine 1 [running]:
github.com/reviewdog/reviewdog/service/bitbucket.(*ReportAnnotator).Post(0xc0001b7490, {0xc00046a100?, 0x16?}, 0xc00040a090)
	/home/runner/work/reviewdog/reviewdog/service/bitbucket/annotator.go:92 +0x1d5
github.com/reviewdog/reviewdog.(*Reviewdog).runFromResult(0xc0001939f0, {0xd81d00, 0xc0001fe9f0}, {0xc00046a100, 0x16, 0x20}, {0x0, 0x0, 0x0}, 0x0)
	/home/runner/work/reviewdog/reviewdog/reviewdog.go:103 +0x1e2
github.com/reviewdog/reviewdog.RunFromResult(...)
	/home/runner/work/reviewdog/reviewdog/reviewdog.go:37
github.com/reviewdog/reviewdog/project.Run.func1({0xc000131014, 0x7}, 0xc00041c780)
	/home/runner/work/reviewdog/reviewdog/project/run.go:122 +0x2a5
github.com/reviewdog/reviewdog/project.Run.(*ResultMap).Range.func2({0xab6d60?, 0xc0004107c0?}, {0xaedbe0?, 0xc00041c780?})
	/home/runner/work/reviewdog/reviewdog/resultmap.go:62 +0x4d
sync.(*Map).Range(0xc0000b4200, 0xc000193bc8)
	/opt/hostedtoolcache/go/1.21.7/x64/src/sync/map.go:476 +0x228
github.com/reviewdog/reviewdog.(*ResultMap).Range(...)
	/home/runner/work/reviewdog/reviewdog/resultmap.go:61
github.com/reviewdog/reviewdog/project.Run({0xd81d00?, 0xc0001fe9f0}, 0xc000104e10?, 0xc00002e30b?, {0xd7dfe0?, 0xc0001b7490}, {0xd7fd68?, 0x1243f20}, 0xc?, 0x4, ...)
	/home/runner/work/reviewdog/reviewdog/project/run.go:114 +0x26d
main.run({0xd7e080, 0xc000106020}, {0xd7dec0?, 0xc000106028}, 0x1215240)
	/home/runner/work/reviewdog/reviewdog/cmd/reviewdog/main.go:461 +0x1491
main.main()
	/home/runner/work/reviewdog/reviewdog/cmd/reviewdog/main.go:268 +0xa5

Notes

  • The panic only occurs when both runners produce output.
  • Running each runner separately works fine.