public static async UploadStringsToAllRepos()

in src/localizationStringsUploader.ts [120:226]


    public static async UploadStringsToAllRepos(updatedVisuals: IndexedFoldersSet, source: SourceType) {

        if (!Object.keys(updatedVisuals).length) {
            console.log("Nothing to update");
            return null;
        }

        let promises: Promise<any>[] = [];

        let github: GitHubApi = GithubApiCreator.CreateGithubApi();

        let branchRef: string = source === SourceType.Capabilities ? "heads/locUpdateCapabilities" : "heads/locUpdate";
        let prHead: string = source === SourceType.Capabilities ? "pbicvbot:locUpdateCapabilities" : "pbicvbot:locUpdate";

        for (let visualName in updatedVisuals) {
            let folders: IndexedObjects = updatedVisuals[visualName];

            let sha: ShaModel;

            let prExists: boolean = await LocalizationStringsUploader.IsPullRequestExists(LocalizationStringsUploader.ms, visualName, prHead);

            if (!prExists) {
                sha = await LocalizationStringsUploader.UpdateBranchFromMasterRepo(github, visualName, branchRef);
            } else {
                sha = await LocalizationStringsUploader.GetShaModelForCurrentCommit(github, visualName, branchRef);
            }

            if (Object.keys(folders).length) {
                let promises: Promise<any>[] = [];

                for (let folderName in folders) {
                    if (folderName === LocalizationStringsUploader.enUs && source === SourceType.UtilsRepo) {
                        continue;
                    }

                    let content: DisplayNameAndKeyPairs = folders[folderName];
                    
                    promises.push(github.gitdata.createBlob({
                        content: JSON.stringify(content, null, "\t"),
                        encoding: "utf-8",
                        owner: LocalizationStringsUploader.pbicvbot,
                        repo: visualName
                    })
                        .then((blob) => {
                            return {
                                path: "stringResources/" + folderName + "/resources.resjson",
                                sha: blob.data.sha
                            }
                        }));
                }

                Promise.all(promises)
                    .then((values: object[]) => {
                        let treesArrays: Array<object> = values.map((x: any) => {
                            return {
                                "path": x.path,
                                "mode": "100644",
                                "type": "blob",
                                "sha": x.sha
                            }
                        }
                        );
                        console.log("before create tree " + visualName);
                        return github.gitdata.createTree({
                            owner: LocalizationStringsUploader.pbicvbot,
                            repo: visualName,
                            base_tree: sha.treeSha,
                            tree: JSON.stringify(treesArrays)
                        });
                    })
                    .then((newTree) => {
                        console.log("after create tree " + visualName);
                        console.log("before create commit " + visualName);
                        return github.gitdata.createCommit({
                            message: "updated localization strings",
                            tree: newTree.data.sha,
                            owner: LocalizationStringsUploader.pbicvbot,
                            repo: visualName,
                            parents: [sha.headCommitSha]
                        });
                    })
                    .then((ref) => {
                        console.log("after create commit " + visualName);
                        return github.gitdata.updateReference({
                            force: true,
                            owner: LocalizationStringsUploader.pbicvbot,
                            repo: visualName,
                            ref: branchRef,
                            sha: ref.data.sha
                        });
                    })
                    .then(() => {
                        if (!prExists) {
                            let title: string = "Localization strings from " + (source === SourceType.Capabilities ? "capabilities" : "utils") + " update";

                            return github.pullRequests.create({
                                base: "master",
                                owner: LocalizationStringsUploader.ms,
                                repo: visualName,
                                head: prHead,
                                title: title
                            });
                        }
                    });
            }
        }
    }