async function init()

in on-merge/index.js [32:123]


async function init() {
    const { payload, repo } = github_1.context;
    if (!payload.pull_request) {
        throw Error('Only pull_request events are supported.');
    }
    const accessToken = core.getInput('github_token', { required: true });
    const github = (0, github_1.getOctokit)(accessToken).rest;
    const versionsConfig = await github.repos.getContent({
        ...github_1.context.repo,
        ref: 'main',
        path: 'versions.json',
    });
    const backportConfig = await github.repos.getContent({
        ...github_1.context.repo,
        ref: 'main',
        path: '.backportrc.json',
    });
    const versionsJSON = Buffer.from(versionsConfig.data.content, 'base64').toString();
    const backportJSON = Buffer.from(backportConfig.data.content, 'base64').toString();
    const versionsRaw = JSON.parse(versionsJSON);
    const backportRaw = JSON.parse(backportJSON);
    const versions = (0, versions_1.parseVersions)(versionsRaw);
    const versionMap = (backportRaw === null || backportRaw === void 0 ? void 0 : backportRaw.branchLabelMapping) || {};
    const pullRequestPayload = payload;
    const pullRequest = pullRequestPayload.pull_request;
    if (pullRequest.base.ref === 'main') {
        const currentLabel = `v${versions.currentMinor.version}`;
        if (!pullRequest.labels.some((label) => label.name === currentLabel)) {
            await github.issues.addLabels({
                ...github_1.context.repo,
                issue_number: pullRequest.number,
                labels: [currentLabel],
            });
        }
        const targets = (0, backportTargets_1.resolveTargets)(versions, versionMap, pullRequest.labels.map((label) => label.name));
        if (!(0, util_1.labelsContain)(pullRequest.labels, 'backport:skip') && targets.length) {
            try {
                let actionUrl = '';
                if (process.env.GITHUB_SERVER_URL && process.env.GITHUB_REPOSITORY && process.env.GITHUB_RUN_ID) {
                    actionUrl = `${process.env.GITHUB_SERVER_URL}/${process.env.GITHUB_REPOSITORY}/actions/runs/${process.env.GITHUB_RUN_ID}`;
                }
                await github.issues.createComment({
                    ...repo,
                    issue_number: pullRequest.number,
                    body: `Starting backport for target branches: ${targets.join(', ')}${actionUrl ? '\n\n' + actionUrl : ''}`,
                });
                await github.pulls.update({
                    ...repo,
                    pull_number: pullRequest.number,
                    body: `${pullRequest.body}\n\n<!--ONMERGE ${JSON.stringify({
                        backportTargets: targets,
                    })} ONMERGE-->`,
                });
            }
            catch (error) {
                console.error('An error occurred', error);
                core.setFailed(error.message);
            }
            await (0, backport_1.backportRun)({
                options: {
                    repoOwner: repo.owner,
                    repoName: repo.repo,
                    accessToken,
                    interactive: false,
                    pullNumber: pullRequest.number,
                    assignees: [pullRequest.user.login],
                    autoMerge: true,
                    autoMergeMethod: 'squash',
                    targetBranches: targets,
                    publishStatusCommentOnFailure: true,
                    publishStatusCommentOnSuccess: true, // TODO this will flip to false once we have backport summaries implemented
                },
            });
        }
    }
    else if ((0, util_1.labelsContain)(pullRequest.labels, 'backport')) {
        const prData = (0, util_1.getPrBackportData)(pullRequest.body);
        if (prData) {
            const version = await (0, util_1.getPrPackageVersion)(github, repo.owner, repo.repo, pullRequest.base.ref);
            for (const pr of prData) {
                if (!pr.sourcePullRequest) {
                    continue;
                }
                await github.issues.addLabels({
                    ...github_1.context.repo,
                    issue_number: pr.sourcePullRequest.number,
                    labels: [`v${version}`], // TODO switch this to use getVersionLabel when it's appropriate to increment patch versions after BCs
                });
            }
        }
    }
}