build: Zip pcb export outputs

Change-Id: I15631a23e7d6a76b8efa60dcdfd17eb1a613abfe
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/hardware/testing/+/245439
Lint: Lint 🤖 <android-build-ayeaye@system.gserviceaccount.com>
Reviewed-by: Erik Gilling <konkers@google.com>
Commit-Queue: Anthony DiGirolamo <tonymd@google.com>
diff --git a/MODULE.bazel b/MODULE.bazel
index fe54e16..dda7dc3 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -18,3 +18,4 @@
 )
 
 bazel_dep(name = "bazel_skylib", version = "1.7.1")
+bazel_dep(name = "rules_pkg", version = "1.0.1")
diff --git a/build/kicad.bzl b/build/kicad.bzl
index d308953..8e68657 100644
--- a/build/kicad.bzl
+++ b/build/kicad.bzl
@@ -15,6 +15,8 @@
 """KiCad Bazel Rules."""
 
 load("@bazel_skylib//rules:native_binary.bzl", "native_test")
+load("@rules_pkg//pkg:mappings.bzl", "pkg_files")
+load("@rules_pkg//pkg:zip.bzl", "pkg_zip")
 
 def kicad_project(name, project, sym_lib_table, fp_lib_table, schematic_root, schematic_srcs, data, pcb, pcb_design_rules, pcb_layers):
     """Top level kicad project macro.
@@ -65,6 +67,20 @@
         data = data + [project],
         layer_list = pcb_layers,
     )
+    pkg_files(
+        name = name + "_fabrication_output_files",
+        srcs = [
+            ":" + name + "_pcb_export",
+        ],
+        prefix = "fabrication_outputs",
+    )
+    pkg_zip(
+        name = name + "_fabrication_output_zip",
+        out = "fabrication_outputs.zip",
+        srcs = [
+            ":" + name + "_fabrication_output_files",
+        ],
+    )
 
 def kicad_schematic_test(name, root, srcs, data):
     args = ["sch", "erc", "--exit-code-violations", "$(rootpath " + root + " )"]