Skip to content

Failed to send to Bitbucket when using multiple runners #2203

@Rekwian

Description

@Rekwian

Hello,

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

.reviewdog.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)

    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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions