Plumb package_repository_name.

Support specifying package_repository_name in fuchsia_package_tasks.

Change-Id: I259869d20b4d06fc8da8fc571b9d8701a2fb015c
Reviewed-on: https://fuchsia-review.googlesource.com/c/sdk-integration/+/791185
Reviewed-by: Jiaming Li <lijiaming@google.com>
Fuchsia-Auto-Submit: Darren Chan <chandarren@google.com>
Commit-Queue: Darren Chan <chandarren@google.com>
diff --git a/bazel_rules_fuchsia/fuchsia/private/workflows/fuchsia_package_tasks.bzl b/bazel_rules_fuchsia/fuchsia/private/workflows/fuchsia_package_tasks.bzl
index 4d62f01..a4f3aae 100644
--- a/bazel_rules_fuchsia/fuchsia/private/workflows/fuchsia_package_tasks.bzl
+++ b/bazel_rules_fuchsia/fuchsia/private/workflows/fuchsia_package_tasks.bzl
@@ -11,7 +11,7 @@
 load(":fuchsia_task_verbs.bzl", "make_help_executable", "verbs")
 load(":fuchsia_workflow.bzl", "fuchsia_workflow", "fuchsia_workflow_rule")
 load(":providers.bzl", "FuchsiaDebugSymbolInfo", "FuchsiaPackageInfo", "FuchsiaWorkflowInfo")
-load(":utils.bzl", "label_name", "normalized_target_name")
+load(":utils.bzl", "flatten", "label_name", "normalized_target_name")
 
 def _to_verb(label):
     return verbs.custom(label_name(label))
@@ -75,12 +75,12 @@
 )
 
 def _fuchsia_package_default_task_impl(ctx, make_workflow):
-    default_workflow = make_workflow(sequence = [
+    default_workflow = make_workflow(sequence = flatten([
         ctx.attr.debug_symbols_task,
         ctx.attr.publish_task,
     ] + ctx.attr.component_run_tasks + [
-        ctx.attr.publish_cleanup_task,
-    ] if (
+        ctx.attr.publish_cleanup_task or [],
+    ]) if (
         ctx.attr.is_test and ctx.attr.component_run_tasks
     ) else [ctx.attr.help_task])
     return [
@@ -125,7 +125,6 @@
         "publish_cleanup_task": attr.label(
             doc = "The package publishing cleanup task associated with the package.",
             providers = [FuchsiaWorkflowInfo],
-            mandatory = True,
         ),
         "component_run_tasks": attr.label_list(
             doc = "The component run tasks.",
@@ -148,6 +147,7 @@
         tools = {},
         is_test = False,
         tags = [],
+        package_repository_name = None,
         **kwargs):
     # TODO(fxbug.dev/98996): Use ffx isolation. ffx test run currently needs
     # to access ~/.local/share/Fuchsia/ffx/ or else it crashes.
@@ -177,7 +177,7 @@
     fuchsia_task_publish(
         name = anonymous_publish_task,
         packages = [package],
-        package_repository_name = anonymous_repo_name,
+        package_repository_name = package_repository_name or anonymous_repo_name,
         **kwargs
     )
     fuchsia_task_ffx(
@@ -193,6 +193,7 @@
     fuchsia_task_publish(
         name = publish_only_task,
         packages = [package],
+        package_repository_name = package_repository_name,
         **kwargs
     )
     fuchsia_workflow(
@@ -230,7 +231,7 @@
         fuchsia_task_run_component(
             name = component_run_tasks[-1],
             default_argument_scope = "global",
-            repository = anonymous_repo_name,
+            repository = package_repository_name or anonymous_repo_name,
             package = package,
             component = component,
             tags = tags,
@@ -243,8 +244,9 @@
                 debug_symbols_task,
                 anonymous_publish_task,
                 component_run_tasks[-1],
+            ] + ([] if package_repository_name else [
                 verbs.delete_repo(anonymous_publish_task),
-            ],
+            ]),
             apply_fuchsia_transition = True,
             tags = top_level_tags + manual_test,
             **kwargs
@@ -256,7 +258,7 @@
         fuchsia_task_run_driver_tool(
             name = "%s.run_only" % tool_run_task,
             default_argument_scope = "global",
-            repository = anonymous_repo_name,
+            repository = package_repository_name or anonymous_repo_name,
             package = package,
             tool = tool,
             tags = tags,
@@ -269,8 +271,9 @@
                 debug_symbols_task,
                 anonymous_publish_task,
                 "%s.run_only" % tool_run_task,
+            ] + ([] if package_repository_name else [
                 verbs.delete_repo(anonymous_publish_task),
-            ],
+            ]),
             apply_fuchsia_transition = True,
             tags = top_level_tags,
             **kwargs
@@ -282,7 +285,9 @@
         help_task = help_task,
         debug_symbols_task = debug_symbols_task,
         publish_task = anonymous_publish_task,
-        publish_cleanup_task = verbs.delete_repo(anonymous_publish_task),
+        publish_cleanup_task = None if (
+            package_repository_name
+        ) else verbs.delete_repo(anonymous_publish_task),
         component_run_tasks = component_run_tasks,
         is_test = is_test,
         package = package,