public static async UploadStringsToCommonRepo()

in src/localizationStringsUploader.ts [20:118]


    public static async UploadStringsToCommonRepo(updatedVisuals: IndexedFoldersSet) {

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

        let sha: ShaModel;

        let github: GitHubApi = GithubApiCreator.CreateGithubApi();

        let prExists: boolean = await LocalizationStringsUploader.IsPullRequestExists(LocalizationStringsUploader.ms,
            LocalizationStringsUploader.localizationUtilsRepoName,
            "pbicvbot:master");

        sha = await LocalizationStringsUploader.GetShaModelForCurrentCommit(github, LocalizationStringsUploader.localizationUtilsRepoName, "heads/master");

        let namedBlobs: { [key: string]: string } = {};
        let promises: Promise<any>[] = [];

        for (let visualName in updatedVisuals) {
            let content: IndexedObjects = updatedVisuals[visualName][LocalizationStringsUploader.enUs];

            promises.push(
                github.gitdata.createBlob({
                    content: JSON.stringify(content, null, "\t"),
                    encoding: "utf-8",
                    owner: LocalizationStringsUploader.pbicvbot,
                    repo: LocalizationStringsUploader.localizationUtilsRepoName
                })
                    .then((blob) => {
                        namedBlobs[visualName] = blob.data.sha;
                    })
            );
        }

        await Promise.all(promises)
            .catch(err => {
                console.log(err);
            });

        let trees: object[] = [];

        for (let visualName in namedBlobs) {
            let blobSha: string = namedBlobs[visualName];

            trees.push({
                "path": visualName + "/en-US/resources.resjson",
                "mode": "100644",
                "type": "blob",
                "sha": blobSha
            });
        }

        github.gitdata.createTree({
            owner: LocalizationStringsUploader.pbicvbot,
            repo: LocalizationStringsUploader.localizationUtilsRepoName,
            base_tree: sha.treeSha,
            tree: JSON.stringify(trees)
        })
            .then((newTree) => {
                return github.gitdata.createCommit({
                    message: "updated localization strings",
                    tree: newTree.data.sha,
                    owner: LocalizationStringsUploader.pbicvbot,
                    repo: LocalizationStringsUploader.localizationUtilsRepoName,
                    parents: [sha.headCommitSha]
                });
            })
            .then((ref) => {
                return github.gitdata.updateReference({
                    force: true,
                    owner: LocalizationStringsUploader.pbicvbot,
                    repo: LocalizationStringsUploader.localizationUtilsRepoName,
                    ref: "heads/master",
                    sha: ref.data.sha
                });
            })
            .then(() => {
                return github.pullRequests.getAll({
                    owner: LocalizationStringsUploader.ms,
                    repo: LocalizationStringsUploader.localizationUtilsRepoName
                })
                    .then((pullRequests) => {
                        if (!prExists) {
                            return github.pullRequests.create({
                                base: "master",
                                owner: LocalizationStringsUploader.ms,
                                repo: LocalizationStringsUploader.localizationUtilsRepoName,
                                head: "pbicvbot:master",
                                title: "Localization strings update"
                            });
                        }
                    })
            })
            .catch((error) => {
                console.log(error);
            });
    }