@@ -20,10 +20,12 @@ import FirebaseManifest
20
20
import Utils
21
21
22
22
enum Tags {
23
- static func create ( gitRoot: URL ) {
23
+ static func createTags ( gitRoot: URL , deleteExistingTags : Bool = false ) {
24
24
let manifest = FirebaseManifest . shared
25
- createTag ( gitRoot: gitRoot, tag: " CocoaPods- \( manifest. version) " )
26
- createTag ( gitRoot: gitRoot, tag: " CocoaPods- \( manifest. version) -beta " )
25
+ createTag ( gitRoot: gitRoot, tag: " CocoaPods- \( manifest. version) " ,
26
+ deleteExistingTags: deleteExistingTags)
27
+ createTag ( gitRoot: gitRoot, tag: " CocoaPods- \( manifest. version) -beta " ,
28
+ deleteExistingTags: deleteExistingTags)
27
29
28
30
for pod in manifest. pods {
29
31
if pod. isFirebase {
@@ -36,12 +38,43 @@ enum Tags {
36
38
fatalError ( " Non-Firebase pod \( pod. name) is missing a version " )
37
39
}
38
40
let tag = pod. name. replacingOccurrences ( of: " Google " , with: " " ) + " - " + version
39
- createTag ( gitRoot: gitRoot, tag: tag)
41
+ createTag ( gitRoot: gitRoot, tag: tag, deleteExistingTags : deleteExistingTags )
40
42
}
41
43
}
42
44
43
- private static func createTag( gitRoot: URL , tag: String ) {
45
+ static func updateTags( gitRoot: URL ) {
46
+ createTags ( gitRoot: gitRoot, deleteExistingTags: true )
47
+ }
48
+
49
+ private static func createTag( gitRoot: URL , tag: String , deleteExistingTags: Bool ) {
50
+ if deleteExistingTags {
51
+ verifyTagsAreSafeToDelete ( )
52
+ Shell . executeCommand ( " git tag --delete \( tag) " , workingDir: gitRoot)
53
+ Shell . executeCommand ( " git push --delete origin \( tag) " , workingDir: gitRoot)
54
+ }
44
55
Shell . executeCommand ( " git tag \( tag) " , workingDir: gitRoot)
45
56
Shell . executeCommand ( " git push origin \( tag) " , workingDir: gitRoot)
46
57
}
58
+
59
+ private static func verifyTagsAreSafeToDelete( ) {
60
+ var homeDirURL : URL
61
+ if #available( OSX 10 . 12 , * ) {
62
+ homeDirURL = FileManager . default. homeDirectoryForCurrentUser
63
+ } else {
64
+ fatalError ( " Run on at least macOS 10.12 " )
65
+ }
66
+ let manifest = FirebaseManifest . shared
67
+ let firebasePublicURL = homeDirURL. appendingPathComponents (
68
+ [ " .cocoapods " , " repos " , " cocoapods " , " Specs " , " 0 " , " 3 " , " 5 " , " Firebase " ]
69
+ )
70
+
71
+ guard FileManager . default. fileExists ( atPath: firebasePublicURL. path) else {
72
+ fatalError ( " You must have the CocoaPods Spec repo installed to retag versions. " )
73
+ }
74
+
75
+ guard !FileManager. default. fileExists ( atPath:
76
+ firebasePublicURL. appendingPathComponent ( manifest. version) . path) else {
77
+ fatalError ( " Do not remove tag of a published Firebase version. " )
78
+ }
79
+ }
47
80
}
0 commit comments