@@ -55,7 +55,7 @@ type PubSubMessage struct {
5555 Data []byte `json:"data"`
5656}
5757
58- type FolderRecursion func (string , FolderRecursion )
58+ type FolderRecursion func (* cloudresourcemanager2. Folder , FolderRecursion )
5959
6060func activeProjectFilter (project * cloudresourcemanager.Project ) bool {
6161 return project .LifecycleState == LifecycleStateActiveRequested
@@ -274,21 +274,41 @@ func invoke(ctx context.Context) {
274274 }
275275 }
276276
277- getSubFoldersAndRemoveProjectsRecursively := func (folderId string , recursion FolderRecursion ) {
277+ removeFolder := func (folder * cloudresourcemanager2.Folder ) {
278+ folderId := folder .Name
279+ logger .Printf ("Try to delete folder with id [%s]" , folderId )
280+ _ , err := folderService .Delete (folderId ).Do ()
281+ if err != nil {
282+ logger .Printf ("Failed to delete folder [%s], error [%s]" , folderId , err .Error ())
283+ } else {
284+ logger .Printf ("Deleted folder [%s]" , folderId )
285+ }
286+ }
287+
288+ getSubFoldersAndRemoveProjectsFoldersRecursively := func (folder * cloudresourcemanager2.Folder , recursion FolderRecursion ) {
289+ folderId := folder .Name
278290 listFoldersRequest := folderService .List ().Parent (folderId ).ShowDeleted (false )
279291 if err := listFoldersRequest .Pages (ctx , func (foldersResponse * cloudresourcemanager2.ListFoldersResponse ) error {
280292 for _ , folder := range foldersResponse .Folders {
281- recursion (folder . Name , recursion )
293+ recursion (folder , recursion )
282294 }
283295 removeProjectsInFolder (folderId )
296+ if folder .Parent != fmt .Sprintf ("folders/%s" , rootFolderId ) {
297+ removeFolder (folder )
298+ }
284299 return nil
285300 }); err != nil {
286301 logger .Fatalf ("Fail to get subfolders for the folder with id [%s], error [%s]" , folderId , err .Error ())
287302 }
288303 }
289304
290305 rootFolderId := fmt .Sprintf ("folders/%s" , rootFolderId )
291- getSubFoldersAndRemoveProjectsRecursively (rootFolderId , getSubFoldersAndRemoveProjectsRecursively )
306+ rootFolder , err := folderService .Get (rootFolderId ).Do ()
307+ if err != nil {
308+ logger .Printf ("Fail to get parent folder [%s], error [%s]" , rootFolderId , err .Error ())
309+ } else {
310+ getSubFoldersAndRemoveProjectsFoldersRecursively (rootFolder , getSubFoldersAndRemoveProjectsFoldersRecursively )
311+ }
292312}
293313
294314func CleanUpProjects (ctx context.Context , m PubSubMessage ) error {
0 commit comments