theonedev/onedev · error · ExplicitException

No issue creation settings for project: %s

Error message

No issue creation settings for project: %s

What it means

ServiceDeskSetting.getIssueCreationSetting(project) finds the issue creation setting whose applicable-projects pattern matches the given project path. If no configured setting's pattern matches, it throws this ExplicitException with the project path. Service desk operation for that project cannot proceed without a matching rule.

Source

Thrown at server-core/src/main/java/io/onedev/server/model/support/administration/ServiceDeskSetting.java:65

		return issueCreationSettings;
	}

	public void setIssueCreationSettings(List<IssueCreationSetting> issueCreationSettings) {
		this.issueCreationSettings = issueCreationSettings;
	}
	
	public IssueCreationSetting getIssueCreationSetting(Project project) {
		for (IssueCreationSetting setting: issueCreationSettings) {
			String projectPatterns = setting.getApplicableProjects();
			if (projectPatterns == null)
				projectPatterns = "**";
			PatternSet projectPatternSet = PatternSet.parse(projectPatterns);
			
			if (projectPatternSet.matches(new PathMatcher(), project.getPath())) 
				return setting;
		}
		String errorMessage = String.format("No issue creation settings for project: %s", project.getPath());
		throw new ExplicitException(errorMessage);
	}
	
	public void onMoveProject(String oldPath, String newPath) {
		for (IssueCreationSetting setting: getIssueCreationSettings()) {
			setting.setApplicableProjects(Project.substitutePath(
					setting.getApplicableProjects(), oldPath, newPath));
		}
	}
	
	public Usage onDeleteProject(String projectPath) {
		Usage usage = new Usage();
		
		int index = 1;
		for (IssueCreationSetting setting: getIssueCreationSettings()) {
			if (Project.containsPath(setting.getApplicableProjects(), projectPath))
				usage.add("issue creation setting #" + index + ": applicable projects");
			index++;
		}

View on GitHub (pinned to d44925c47c)

Solutions

  1. Add an IssueCreationSetting in Administration → Service Desk whose applicable projects pattern covers the project path (e.g. `~/*` or the explicit project path)
  2. If the project was renamed, update the setting's applicable projects to the new path (or use the project move handler which substitutes paths)
  3. Verify the pattern syntax against the project's actual getPath() value

Example fix

// before: patterns only cover 'demo/*' but project is 'apps/main'
applicableProjects: "demo/*"
// after
applicableProjects: "demo/*\napps/*"
Defensive patterns

Strategy: validation

Validate before calling

var setting = OneDev.getInstance(SettingService.class).getServiceDeskSetting();
boolean matches = setting.getIssueCreationSettings().stream()
    .anyMatch(s -> PatternSet.parse(s.getApplicableProjects())
        .matches(new PathMatcher(), project.getPath()));

Try / catch

try {
    var ics = setting.getIssueCreationSetting(project);
} catch (ExplicitException e) {
    logger.warn("No service desk setting for {}: {}", project.getPath(), e.getMessage());
}

Prevention

When it happens

Trigger: An incoming service-desk request (or any call to getIssueCreationSetting) targeting a project whose path matches none of the configured IssueCreationSetting project patterns.

Common situations: Project renamed/moved so it no longer matches the configured patterns (e.g. 'old/*' vs new path); new project created without extending service desk settings; pattern typos or overly restrictive globs.

Understand the failure class

Background: "X is required", "must be set", "cannot be empty": the missing-required-config error family, from Vertex AI project/location to WeChat keys — this error's family across 18 libraries.

Related errors


AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06). Data as JSON: /api/errors/80651934c6e6414b. Report an issue: GitHub.