+
+ + + + + + This package analysis was initiated for the + + + {{ project.analyzed_package.package_url }} + + + package of the + + + {{ project.analyzed_package.project.slug }} + + + project. + +
+diff --git a/scanpipe/migrations/0070_discoveredpackage_analysis_subproject.py b/scanpipe/migrations/0070_discoveredpackage_analysis_subproject.py
new file mode 100644
index 0000000000..2702972519
--- /dev/null
+++ b/scanpipe/migrations/0070_discoveredpackage_analysis_subproject.py
@@ -0,0 +1,19 @@
+# Generated by Django 5.1.5 on 2025-03-03 06:53
+
+import django.db.models.deletion
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('scanpipe', '0069_project_purl'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='discoveredpackage',
+ name='analysis_subproject',
+ field=models.OneToOneField(blank=True, editable=False, help_text='Sub-project dedicated to analyzing this package.', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='analyzed_package', to='scanpipe.project'),
+ ),
+ ]
diff --git a/scanpipe/models.py b/scanpipe/models.py
index 0461cc663a..0f448c43f4 100644
--- a/scanpipe/models.py
+++ b/scanpipe/models.py
@@ -3442,6 +3442,15 @@ class DiscoveredPackage(
notes = models.TextField(blank=True)
source_packages = models.JSONField(default=list, blank=True)
tag = models.CharField(blank=True, max_length=50)
+ analysis_subproject = models.OneToOneField(
+ Project,
+ related_name="analyzed_package",
+ help_text=_("Sub-project dedicated to analyzing this package."),
+ on_delete=models.SET_NULL,
+ blank=True,
+ null=True,
+ editable=False,
+ )
objects = DiscoveredPackageQuerySet.as_manager()
diff --git a/scanpipe/templates/scanpipe/includes/project_analyzed_package_warning.html b/scanpipe/templates/scanpipe/includes/project_analyzed_package_warning.html
new file mode 100644
index 0000000000..23a1f5756d
--- /dev/null
+++ b/scanpipe/templates/scanpipe/includes/project_analyzed_package_warning.html
@@ -0,0 +1,26 @@
+