phacility/phabricator · error · PhabricatorWorkerPermanentFailureException

No JIRA provider configured.

Error message

No JIRA provider configured.

What it means

DoorkeeperJIRAFeedWorker::getProvider() resolves the active JIRA auth provider via PhabricatorJIRAAuthProvider::getJIRAProvider(). When no enabled JIRA provider is configured, it throws PhabricatorWorkerPermanentFailureException, permanently dropping the feed story task. The pattern mirrors the Asana worker: integration workers are permanently-failed fast when their backing provider is absent.

Source

Thrown at src/applications/doorkeeper/worker/DoorkeeperJIRAFeedWorker.php:136

      }
    }
  }


/* -(  Internals  )---------------------------------------------------------- */


  /**
   * Get the active JIRA provider.
   *
   * @return PhabricatorJIRAAuthProvider Active JIRA auth provider.
   * @task internal
   */
  private function getProvider() {
    if (!$this->provider) {
      $provider = PhabricatorJIRAAuthProvider::getJIRAProvider();
      if (!$provider) {
        throw new PhabricatorWorkerPermanentFailureException(
          pht('No JIRA provider configured.'));
      }
      $this->provider = $provider;
    }
    return $this->provider;
  }


  /**
   * Get a list of users to act as when publishing into JIRA.
   *
   * @return list<phid> Candidate user PHIDs to act as when publishing this
   *                    story.
   * @task internal
   */
  private function findUsersToPossess() {
    $object = $this->getStoryObject();
    $publisher = $this->getPublisher();

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Configure the JIRA auth provider in the Auth application (application link, key/secret) so getJIRAProvider() returns one
  2. If JIRA integration is intentionally off, remove/disable the feed worker and the JIRA edges on affected objects so stories stop queueing
  3. Verify with `bin/config get jira` and the Auth providers list that the provider is enabled, not merely installed
Defensive patterns

Strategy: validation

Validate before calling

if (!PhabricatorJIRAAuthProvider::getJIRAProvider()) {
  // Skip JIRA publishing until a provider exists.
  return;
}

Prevention

When it happens

Trigger: A JIRA feed worker runs (e.g. an object has JIRA edges or the worker is triggered by a story) while PhabricatorJIRAAuthProvider::getJIRAProvider() returns null — no JIRA provider configured, or it was disabled after objects got JIRA edges.

Common situations: Objects with existing JIRA issue links after the JIRA provider was disabled or deleted; enabling the JIRA bridge (e.g. via PhabricatorJiraEventListener setups) without finishing provider setup in the Auth application; migrations between instances that drop auth provider config.

Related errors


AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21). Data as JSON: /api/errors/9dcbc76e3f70cd53. Report an issue: GitHub.