GitHub Actions secrets 自动填写及更新(改)

基于Aerozb的代码进行了简单地更改 点击按钮触发脚本执行,当脚本未设置env数据或者脚本env与本地不同时 弹窗提示恢复或者覆盖

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         GitHub Actions secrets 自动填写及更新(改)
// @namespace    https://greasyfork.org/zh-CN/scripts/427698
// @version      1.0.3
// @description  基于Aerozb的代码进行了简单地更改 点击按钮触发脚本执行,当脚本未设置env数据或者脚本env与本地不同时 弹窗提示恢复或者覆盖
// @author       lukey
// @match        https://github.com/*/settings/secrets/actions*
// @grant        GM_notification
// ==/UserScript==

;(function () {
	'use strict'
	var Subhead = document.getElementsByClassName('Subhead')[0]
	Subhead.style.justifyContent = 'space-between'
	var button = document.createElement('div')
	button.className = 'Subhead-actions btn'
	button.innerText = '自动注入secrets'
	Subhead.appendChild(button)
	var flag = null

	button.onclick = function () {
		star()
	}

	function star() {
		console.clear()
		let env = new Object()
		let suffix = null
		let envKeys = []
		/*
    在此注释以下面添加secrets
    格式: env.机密名 = ‘机密值',如有多个机密值请使用&符号分开
    ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓*/
    //示例:
    //换成自己的助力码即可
    env.DDFACTORY_SHARECODES = 'T0225KkcRU8Y9FaEIh_3wPAKcQCjVWnYaS5kRrbA&T0225KkcRU8Y9FaEIh_3wPAKcQCjVWnYaS5kRrbA&T0225KkcRU8Y9FaEIh_3wPAKcQCjVWnYaS5kRrbA&T0225KkcRU8Y9FaEIh_3wPAKcQCjVWnYaS5kRrbA'
    env.FRUITSHARECODES = '9bfe7b5b330f4af0b1f979fc87fe2944&9bfe7b5b330f4af0b1f979fc87fe2944&9bfe7b5b330f4af0b1f979fc87fe2944&9bfe7b5b330f4af0b1f979fc87fe2944&9bfe7b5b330f4af0b1f979fc87fe2944'
    env.PETSHARECODES = 'MTE1NDAxNzcwMDAwMDAwMzg5NTg4NTk=&MTE1NDAxNzcwMDAwMDAwMzg5NTg4NTk=&MTE1NDAxNzcwMDAwMDAwMzg5NTg4NTk=&MTE1NDAxNzcwMDAwMDAwMzg5NTg4NTk='
    env.PLANT_BEAN_SHARECODES = 'mlrdw3aw26j3wflpva4usauts5ecdk3fted7y5q&mlrdw3aw26j3wflpva4usauts5ecdk3fted7y5q&mlrdw3aw26j3wflpva4usauts5ecdk3fted7y5q&mlrdw3aw26j3wflpva4usauts5ecdk3fted7y5q'
    env.DREAM_FACTORY_SHARE_CODES = 'xE2FHpwP8-NFxEoASj29sw==&xE2FHpwP8-NFxEoASj29sw==&xE2FHpwP8-NFxEoASj29sw==&xE2FHpwP8-NFxEoASj29sw=='
    env.JDJOY_SHARECODES = 'A1c07QOFPcgMt1FYRLhlmKt9zd5YaBeE&A1c07QOFPcgMt1FYRLhlmKt9zd5YaBeE&A1c07QOFPcgMt1FYRLhlmKt9zd5YaBeE&A1c07QOFPcgMt1FYRLhlmKt9zd5YaBeE'
    env.JXNC_SHARECODES = '{"smp":"a591e640e867399f627a8e2b47d6f903","active":"jdnc_1_3yuanganju210601_2","joinnum":1}&{"smp":"a591e640e867399f627a8e2b47d6f903","active":"jdnc_1_3yuanganju210601_2","joinnum":1}&{"smp":"a591e640e867399f627a8e2b47d6f903","active":"jdnc_1_3yuanganju210601_2","joinnum":1}&{"smp":"a591e640e867399f627a8e2b47d6f903","active":"jdnc_1_3yuanganju210601_2","joinnum":1}'
    env.JDSGMH_SHARECODES = 'T0225KkcRU8Y9FaEIh_3wPAKcQCjVQmoaT5kRrbA&T0225KkcRU8Y9FaEIh_3wPAKcQCjVQmoaT5kRrbA&T0225KkcRU8Y9FaEIh_3wPAKcQCjVQmoaT5kRrbA&T0225KkcRU8Y9FaEIh_3wPAKcQCjVQmoaT5kRrbA'
    env.JD_CASH_SHARECODES = 'eU9Yab2zZ_5182vWn3QT0w&eU9Yab2zZ_5182vWn3QT0w&eU9Yab2zZ_5182vWn3QT0w&eU9Yab2zZ_5182vWn3QT0w'
		//↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
	 let newObj = Object.keys(env);

		if (localStorage.getItem('env')&&newObj.length==0) {
			if (confirm('本地储存中存在secrets,是否恢复?')) env = JSON.parse(localStorage.getItem('env'))
		} else if (!localStorage.getItem('env')||localStorage.getItem('env')!=JSON.stringify(env)) {
			if (confirm('脚本与本地数据不一致,是否更新到本地nev数据?'))	localStorage.setItem('env', JSON.stringify(env))
		} else {
			GM_notification({text: `当前脚本与本地储存env一致`, title: '不需要同步env', timeout: 3000});
		}
		envKeys = Object.keys(env);
		let keyLen = envKeys.length
		let index = localStorage.getItem('index')
		let url = window.location.href
		let rex = url.lastIndexOf('/')
    suffix = url.substring(rex + 1, url.length)
    
		//通过截取URL斜杠后的字符串,判断当前页,是添加还是修改或者secret页面
   
		//在secret页面才进行失败的secret判断
		if (isSecretPage()) {
			//判断是否有设置失败的secret
			let failedDiv = document.querySelectorAll('div')
			let isDel = true
			for (let i = 0; i < failedDiv.length; i++) {
				if (macth(failedDiv[i].innerHTML, 'Please try again')) {
					isDel = false
					if (localStorage.getItem('resetSecret') == null) {
						localStorage.setItem('resetSecret', envKeys[index - 1])
					}
					break
				}
			}

			//成功设置,则移除resetSecret
			if (isDel) {
				localStorage.removeItem('resetSecret')
			}
		}

		if (index == keyLen) {
			if (confirm('已设置完所有secrets或已设置完新增的secrets,是否从头开始设置')) {
				if (confirm('真的确定从头开始设置?')) {
					index = setIndex(index)
				}
			}
		} else if (!index || index > keyLen) {
			index = setIndex(index)
		}

		//获取设置失败的secret
		let resetSecret = localStorage.getItem('resetSecret')
		if (isSecretPage()) {
			//获取页面secrets
			let keynameList = []
			document.querySelectorAll('code').forEach(e => {
				if (macth(e.className, 'f5')) {
					keynameList.push(e.innerText)
				}
			})

			//是否进入更新页
			let isUpdate = false

			//遍历页面secrets,进行下一步动作
			for (let i = index; i < keyLen; i++) {
				for (let j = 0; j < keynameList.length; j++) {
					//先进入需要重新设置secret的修改页面
					if (resetSecret != null) {
						if (resetSecret == keynameList[j]) {
							window.location.href += '/' + resetSecret
							isUpdate = true
							break
						}
					} else {
						if (envKeys[i] == keynameList[j]) {
							localStorage.setItem('index', i)
							window.location.href += '/' + envKeys[i]
							isUpdate = true
							break
						}
					}
				}
				if (isUpdate) {
					break
				}
				window.location.href += '/new'
				break
			}
		} else if (suffix === 'new') {
			if (resetSecret == null) {
				document.querySelector('#secret_name').value = envKeys[index]
			}
			// 处理设置失败的secret
			else {
				document.querySelector('#secret_name').value = resetSecret
			}
			addOrUpadteValue(true)
		} else {
			addOrUpadteValue(false)
		}

		function addOrUpadteValue(isAdd) {
			//先处理设置失败的secret
			if (resetSecret != null) {
				document.querySelector('#secret_value').value = env[resetSecret]
			} else if (isAdd) {
				document.querySelector('#secret_value').value = env[envKeys[index]]
      } else {
        if(!env[suffix]) return alert('未查询到当前name的值')
				document.querySelector('#secret_value').value = env[suffix]
			}
			localStorage.setItem('index', parseInt(index) + 1)
			let submit = document.querySelector('.form-group > button')
			submit.removeAttribute('disabled')
			submit.click()
		}

		function macth(str, macthStr) {
			return str.indexOf(macthStr) != -1
		}

		function setIndex(index) {
			localStorage.setItem('index', 0)
			index = localStorage.getItem('index')
			return index
		}

		function isSecretPage() {
			return macth(suffix, 'actions')
		}
	}
})()