Add ability to build and sign sparkle tbz from mac-crafter
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Thu, 19 Sep 2024 13:02:43 +0000 (21:02 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Tue, 24 Sep 2024 02:17:45 +0000 (10:17 +0800)
Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
admin/osx/mac-crafter/Sources/Utils/Packaging.swift
admin/osx/mac-crafter/Sources/main.swift

index e22a341402d121833aa552a6e25483009d1848ce..1147f74237b22ec327487bc8b3ad6247093adcf7 100644 (file)
@@ -19,6 +19,8 @@ enum PackagingError: Error {
     case packageBuildError(String)
     case packageSigningError(String)
     case packageNotarisationError(String)
+    case packageSparkleBuildError(String)
+    case packageSparkleSignError(String)
 }
 
 func buildPackage(buildWorkPath: String, productPath: String) throws -> String {
@@ -57,3 +59,17 @@ func notarisePackage(
     }
 }
 
+func buildSparklePackage(packagePath: String, buildPath: String) throws -> String {
+    let sparkleTbzPath = "\(packagePath).tbz"
+    guard shell("tar cf \(sparkleTbzPath) \(packagePath)") == 0 else {
+        throw PackagingError.packageSparkleBuildError("Could not create Sparkle package tbz!")
+    }
+    return sparkleTbzPath
+}
+
+func signSparklePackage(sparkleTbzPath: String, buildPath: String, signKey: String) throws
+{
+    guard shell("\(buildPath)/bin/sign_update -s \(signKey) \(sparkleTbzPath)") == 0 else {
+        throw PackagingError.packageSparkleSignError("Could not sign Sparkle package tbz!")
+    }
+}
index c5cae7b3026a040e1951eebe6a385bda0b14de32..0c9e1ca2707ac11b3cbb286f0e4d2278ea143a2b 100644 (file)
@@ -77,6 +77,9 @@ struct Build: ParsableCommand {
     @Option(name: [.long], help: "Apple package signing ID.")
     var packageSigningId: String?
 
+    @Option(name: [.long], help: "Sparkle package signing key.")
+    var sparklePackageSignKey: String?
+
     @Flag(help: "Reconfigure KDE Craft.")
     var reconfigureCraft = false
 
@@ -241,6 +244,17 @@ struct Build: ParsableCommand {
                     )
                 }
             }
+
+            let sparklePackagePath =
+                try buildSparklePackage(packagePath: packagePath, buildPath: buildPath)
+
+            if let sparklePackageSignKey {
+                try signSparklePackage(
+                    sparkleTbzPath: sparklePackagePath,
+                    buildPath: buildPath,
+                    signKey: sparklePackageSignKey
+                )
+            }
         }
 
         print("Done!")