Auto Merge Dependabot PRs

Automatically clicks the merge button on Dependabot PRs and "Done" button on the notification bar

目前为 2024-10-26 提交的版本。查看 最新版本

// ==UserScript==
// @name         Auto Merge Dependabot PRs
// @namespace    http://tampermonkey.net/
// @version      0.8
// @description  Automatically clicks the merge button on Dependabot PRs and "Done" button on the notification bar
// @author       Nick2bad4u
// @match        https://github.com/*/*/pull/*
// @grant        none
// @icon         https://www.google.com/s2/favicons?sz=64&domain=github.com
// @license      UnLicense
// ==/UserScript==

(function() {
    'use strict';

    let lastCheck = 0;
    const CHECK_INTERVAL = 1000;
    let observer;

    function checkAndMerge() {
        const now = Date.now();
        if (now - lastCheck < CHECK_INTERVAL) return;
        lastCheck = now;

        console.log('checkAndMerge function called');

        const authorElement = document.querySelector('.author');
        if (authorElement && /dependabot(\[bot\])?|Nick2bad4u/.test(authorElement.textContent.trim())) {
            setTimeout(() => {
                const mergeButton = document.querySelector('.btn.btn-sm');
                if (mergeButton && !mergeButton.disabled) {
                    console.log('Merge button is enabled, clicking it');
                    mergeButton.click();
                    if (observer) observer.disconnect();
                    observeDoneButton();
                } else {
                    console.log('Merge button is disabled or not found');
                }
            }, 500);
        } else {
            console.log('PR is not created by dependabot');
        }
    }

   function observeDoneButton() {
    console.log('Observing for Done button...');
    const notificationBar = document.querySelector('.js-flash-container'); // Adjust as necessary

    if (!notificationBar) {
        console.log('Notification bar not found');
        return;
    }

    const doneButtonObserver = new MutationObserver(() => {
        const doneButton = document.querySelector('button[aria-label="Done"].btn.btn-sm');
        if (doneButton) {
            console.log('Done button found, clicking it');
            doneButton.click();
            doneButtonObserver.disconnect(); // Stop observing after clicking
        }
    });

    doneButtonObserver.observe(notificationBar, { childList: true, subtree: true });
}


    window.addEventListener('load', function() {
        console.log('Page loaded');

        const targetNode = document.querySelector('.gh-header-meta');
        if (!targetNode) {
            console.log('Target node for observation not found');
            return;
        }

        observer = new MutationObserver(() => {
            console.log('Relevant DOM mutation detected');
            checkAndMerge();
        });

        observer.observe(targetNode, { childList: true, subtree: true });
        checkAndMerge();
    }, false);
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址