function containsSupportedDepGraphLanguagesWithWorkflows()

in packages/repocop/src/evaluation/repository.ts [125:174]


function containsSupportedDepGraphLanguagesWithWorkflows(
	repo: Repository,
	workflowsForRepo: guardian_github_actions_usage[],
	languagesNotNativelySupported: string[],
	languages: string[],
): boolean {
	const remainingLanguagesSupportedByDepGraphIntegrator: string[] =
		languagesNotNativelySupported.filter((language) =>
			depGraphIntegratorSupportedLanguages.includes(language),
		);

	// are all unsupported languages supported by dep graph integrator?
	const allRemainingLanguagesSupportedByDepGraphIntegrator =
		languagesNotNativelySupported.every((language) =>
			depGraphIntegratorSupportedLanguages.includes(language),
		);

	const everyDepGraphSupportedLanguageHasWorkflow =
		remainingLanguagesSupportedByDepGraphIntegrator.every((language) => {
			const repoHasWorkflowForLanguage =
				doesRepoHaveDepSubmissionWorkflowForLanguage(
					repo,
					workflowsForRepo,
					language as DepGraphLanguage,
				);

			if (!repoHasWorkflowForLanguage) {
				console.log(
					`${repo.name} contains ${language} which is supported by Dependency Graph Integrator for Dependabot, but it doesn't have a dependency submission workflow`,
				);
			}

			return repoHasWorkflowForLanguage;
		});

	if (!allRemainingLanguagesSupportedByDepGraphIntegrator) {
		console.log(
			`${repo.name} contains the following languages not supported by Dependabot or Dependency Graph Integrator`,
			languages.filter(
				(language) =>
					!depGraphIntegratorSupportedLanguages.includes(language) &&
					!supportedDependabotLanguages.includes(language),
			),
		);
	}
	return (
		allRemainingLanguagesSupportedByDepGraphIntegrator &&
		everyDepGraphSupportedLanguageHasWorkflow
	);
}