thonkhub.22.12.28

今天又到了onedrive转三盘的时候🤔前几天搞的gh自动化可以用起来了,写一个粗糙的自动延时函数,将8个链接文件的url作为8个参数直接塞进去,理论上十分钟甚至⑨分钟后8个workers就会在两个小号上跑起来了(确信🤔

除了它跑到第二个时突然开始显示当前run的状态了🤔好家伙,我当时撸的gh watch忘删了(恼🤔实测那玩意根本没法用来在命令行里打印详细日志,更何况onedrive转三盘的日志压根就不会打印出来,而是转储并发送到了我的小鸡上🤔赶紧删了那段代码重来一遍(恼🤔

thonkdisk

度盘现在貌似上传速度又下降了一截,以前能在github actions上跑出100MB/s以上,现在只有两位数了,至少得四五分钟才能上传完(恼🤔之前那种先上传60秒再上传80秒什么的根本上传不完(全恼🤔

所以我在度盘上传脚本里加了这么一个玩意:每次上传之前先从某个url里获取上传参数,无非是超时时间和线程数,再去上传🤔这样我就可以根据日志情况动态调整这两个值,而不用停止整个runner再重启了(确信🤔

考虑到度盘目前充满各种不确定性,我以后onedrive转双盘和转度盘目测得分开整了(半恼🤔

barbruh

草,两小时后前四个线程搞完了,剩下四个线程只剩一两个了🤔奇怪的是它们都处于只搞完一半(也就是discord出了但guilded没出)的状态,草,是不是账号被橄榄力?🤔

登进去一看,果然两个账号都被橄榄力(恼🤔而且更离谱的是,我当时搞gh自动化的时候将一个链接粘贴了两遍,导致对应的文件也处理了两遍,这样下来最后一个线程完全就没被处理过,现在好了,我需要重新整的文件不再是四五个,而是十几个(全恼🤔

照例重新注册了两个账号,然后接着撸我那套玩意,好家伙,一个文件都没上传上去就光速被橄榄🤔草,是不是我那台使用gh发布命令的vps特征被识别了,只要是用这个vps的ip触发runner的号就会被橄榄?🤔

既然如此,我掏出另外一个小号,这次改用repository_dispatch法触发runners🤔结果上传了一个到一个半文件就被橄榄力🤔

我去,现在看来github actions的好时代,也许真的结束了(全恼🤔它有各种各样的玩意橄榄我的号,比如我在上面跑的玩意被特征识别了,比如我瞬间使用了大量的网络带宽(那不废话吗,十分钟就得下载8GB上传至少24GB,甚至更多),比如我跑了超过1145.14秒之类的🤔

估计等所谓的能一个runner跑一个文件的project cosette出来之前,我还是别玩github actions了(恼🤔那么接下来开始上我自己的vps,onedrive转三盘脚本魔改一顿后基本上能无缝运行,速度不敢说和github actions一样快吧,也慢不到哪儿去🤔

或者我也可以去hetzner整上8台vps来跑八线程onedrive转双盘,最多两小时跑完,然后删🐔(确信🤔估计不会花太多钱,以3.7欧元一个月算的话一顿应该不会超过一块(确信🤔

github actions cli.22.12.22

这段时间我在整一些新的github actions antics,比如使用它新出(迫真)的叫做gh的命令行客户端🤔其实我更想通过抓包来启动github actions机子,但出于某种申必原因firefox现在没法抓github的包了,它只要发送了那个post请求就会跳转,导致请求体出不来(恼🤔我记得年初刚玩github actions的时候firefox还是可以抓到请求体的🤔

反正无论如何,抓不了就不搞什么抓包启动了,再怎么说这种土法antics十成甚至⑨成会遇见各种申必不确定性因素,比如它里面有一个申必token我不清楚怎么获取,总不能每次跑这玩意都抓一次包⑧🤔

而它那个gh用起来极其蛋疼,登录貌似用的一种验证码登录法,生成一个和本机有关的验证码然后在要登录的账号上打开某个页面将这个验证码粘贴进去就可以了🤔但登录之后还是没法直接启动actions,需要先安装一个git(当然对于绝大多数linux来说git要么自带要么可以轻松装上,但win系统就比较麻烦了),然后用git clone来将某个自己的repo放在本地,再进入那个repo目录,接下来才能执行gh workflow run后面跟上workflow的id或者名字来运行一个一个一个一个runner🤔

这是个非常奇怪的逻辑,因为我只是想跑actions,并不想搞什么正经git🤔但对我来说更不方便的是,它并不支持多账号,我要是想驱动8个线程,我不得先登出一个账号然后再登一个进去,或者用两台机子?而它们放置workflow的repo肯定又不一样,怎么想怎么蛋疼(恼🤔

最后我想到一种比较苟且的方法:它的账号配置文件在~/.config/gh/hosts.yml里面,我可以保存若干个这个文件不同账号的版本,这样我便可以将一次actions run封装成一个函数,每次执行这么一个函数时,便可以先恢复某账号的配置文件版本,然后定位到它的repo本地位置(假设它一个号里面只有一个repo,而我那些跑actions的小号就是这么配置的),并以workflow的名称而非id来运行它,再将配置文件名字改回去🤔

在一顿迫真折腾之后,这玩意搞定了,我只需要在函数后面跟上用户名和guilded视频链接,它就能自动启动一个对应的runner来转视频,几分钟后视频的guilded tube m3u8就会出现在discord频道上,不错🤔

当然,它也可以用来启动onedrive转三盘之类的玩意,我只需要填进去它的八个列表文件的url,让它开始跑就vans了,它会自动每60秒启动一个线程(确信🤔

接下来是不是还可以将其改造成cgi-bin呢?就几个请求的事,并不需要那台hosmatic的破机子实际上跑什么东西🤔拉寄吧倒⑧,这种又是要装git又是要将配置文件放在homedir的屑玩意怎么听怎么不像是可以装进cgi-bin的(全恼🤔

thonkeqing

在迫真查资料的过程中,我发现github actions除了我们熟知的workflow_dispatch手动触发法外,还有一种叫做repository_dispatch的手动触发法(我年初刚开始玩的时候没听说过,搞不好这玩意是这几个月新出的),这种方法只需要一条curl命令(或者js/php)就能启动一个worker并将参数输入进去🤔所以它比前者更适合自动化脚本,或者更适合跑在hosmatic的白嫖玩意上(确信🤔当然它也是有亿点点不足的,比如和gh不一样,它启动worker之后没有任何反馈,除非我去刷网页或者gh,不然我根本不清楚它有没有启动成功(半恼🤔

使用时需要注意输入给它的参数在workflow里面的形式和workflow_dispatch完全不一样,如果使用workflow_dispatch时的参数是github.event.inputs.AYAYA,那么使用repository_dispatch时它就应该便乘github.event.client_payload.AYAYA🤔所以除非使用一套比较复杂的写法,不然我不觉得同一个workflow文件可以同时支持这两种触发方式🤔

但同时,使用repository_dispatch时参数不用在workflow文件里显式地定义出来,只需要在repository_dispatch:下面加一句比如types: pull-antics,然后在post请求里使用这个type就可以了,然后参数可以任意添加进去🤔换句话说检查参数有效性的事情便乘了发送post请求的玩意需要做的事,但我估计这不是什么大问题🤔

那么post请求又该如何构造呢?这个也比较简单(迫真),直接给出示例:

curl -i -X POST -H "Accept: application/vnd.github+json" -H "Authorization: Bearer [PAT]" -H "X-GitHub-Api-Version: 2022-11-28" https://api.github.com/repos/[username]/[reponame]]/dispatches -d '{"event_type":"pull-antics","client_payload":{"arg1":"value1","arg2":"value2"}}'

其中PAT就是我年前写的可以修改repo的github actions(当然现在我已经不将实际运行的代码放在repo里了,所以这玩意也用不上了)里用到的personal access token,按照github文档的说法它需要赋予所有repo权限🤔所有参数都在post请求体的client_payload字段里(确信🤔

thonksette

至此实时日志和自动触发runner都实现了,史诗级巨坑project cosette貌似又向前推进了两步(迫真🤔

discordbruh

草,我才发现准备挪(一代)discord drive那玩意居然在rar压缩阶段停了(全恼🤔由于rarlog实在是太长了,它居然没来得及在空间被占满之前删掉已经压缩完成的文件,而且按理来说我可以按r来恢复rar压缩,但我只恢复了一次,第二次空间被占满后它就恢复不了了(全恼🤔

目前看来由于相当大一部分文件还是被删了,我也只能硬着头皮上传这部分压缩包了(悲🤔好家伙,这坨玩意占据了2TB甚至1.⑨TB,而分卷压缩包的编号也到了23万,好家伙,这是我自1⑨年开始玩discord drive起第一次看到编号突破20万(确信🤔

而除了这些压缩包外居然还有100GB甚至⑨0GB东西没被压缩🤔检查rarlog之后发现也许剩下的东西也没有那么多,只是这⑨0GB里的某些东西来不及删而已(确信🤔但我也可以在下次打包它们的时候直接全部打包算了,反正rar最后一个分卷会保存所有那些文件夹(哪怕此时里面一个文件都没有,我写的那个自动删除脚本只删文件)的时间戳,以后我要是想取回这坨玩意只需要按照顺序跑三次discord drive下载并解压到同一个文件夹下就vans了,它应该能直接以覆盖的形式将那些文件夹的时间戳便乘它们应该是的值,至少win系统里是这样(确信🤔

那就这么搞⑧,等上两天应该就上传完了(确信🤔

AYAYA.22.12.04

昨天实在是困得批爆,设置好截图压缩之后就睡了,从下午睡到了晚上🤔一觉起来截图还有两小时半才压缩完,我打算拿这点时间搞点antics🤔

比如,我研究下如何将github actions的日志文件实时传递回某台服务器🤔有114514种方法可以选择,什么netcat啊,什么ssh啊,但最后由于某种申必原因,我最终确定了用ssh🤔

很不幸的是我那ipv6小鸡的ipv6地址还是没法被github action连上,我有比较确切的证据可以迫真论证,azure的机子压根就不支持ipv6(全恼🤔好在我那坑爹玩意还有ipv4 nat功能,我设置一个nat端口映射之后终于可以连了(恼🤔还有一种方法是用什么cloudflare access来折腾,但我寻思这套玩意装在github actions里得大费一般周折,先不折腾了,以后有兴趣了再去研究🤔

当然,github actions是彻头彻尾的无头系统,不可能搞输入密码那样的交互式登录,我需要设置密钥登录,而且还需要将known hosts里面的东西也预先填上🤔接下来它开始报错,貌似我这边好几台机子的host key和它机子上的就是不一样,那没啥好办的,只能加一条参数来完全跳过host key检查了(悲🤔话说github actions这破玩意连个ssh都需要加sudo,可真够屑的(半恼🤔

还有私钥文件的权限也得设置好,比如设成400,接下来就可以搞了,将这个函数用&的方式并行运行,再运行主函数,前者只有检测到log文件之后,才会去对其执行tail -f,然后立即管道到ssh,ssh里面执行的命令是将当前的数据流(因为最前面写了cat,和split --filter有点像)写入某个日志文件里🤔然后我登进那台小鸡tail -f那个日志文件就可以看进度了(确信🤔

终于,在玩了大半年github actions后,我第一次可以有机会实时观看某个runner的进度,而非像以前那样只有跑完才能拿到日志文件,甚至有些时候我还拿不到日志文件,因为它中途卡住了,根本跑不完(恼🤔

所以这个玩意有没有可能添加进project cosette里面?这个我就不清楚了,到时候再说🤔

bruhfei

很快,那个破ipv6小鸡的nat服务器就被橄榄了(悲🤔我尝试了从cloudflare access到什么sslh之类的各种方案,都连不上🤔但更离谱的是,几个小时后我的github小号都被扬了,之后用某域名注册的号也被风控(全恼🤔

所以我只能切回主系统用某易邮箱撸一个号了🤔现在看来,我开始怀疑ssh连接能瞬间橄榄github账号(确信🤔那么我只能用http的方式传递日志数据流了🤔

某台小鸡卸掉nginx装apache,好家伙,根本不用配置就能用cgi-bin🤔我随便写了一个cgi-bin脚本,这玩意极其简单,post请求的请求体直接便乘了stdin,我只需要一句cat > filename.txt就能完成保存日志文件的任务,接下来我只需要在github actions的脚本里照常将tail -f的数据流管道进curl,应该就vans了(确信🤔

除了它什么都没出,别说日志文件了,连curl请求都没发起🤔我寻思它八成得等日志文件打完才能开始curl上传,首先等它打完那我原先的上传脚本早就将日志上传到discord drive上去了,其次tail -f就不可能结束,除非手动ctrl+c🤔也许curl这种东西和gpg一样压根就不是流式玩意,它只不过是可以接受stdin作为输入而已(恼🤔

而用我之前最喜欢(大嘘)用的split --filter也没啥卵用,它还是卡在那里等tail输出完🤔我后面想到一个坑爹主意,将tail -f的输出转存到某个文件,然后对这个文件每读出并上传第一行就删除掉第一行,然后循环🤔这个玩意基本上只能输出五行东西,接下来它就什么都不输出了(悲🤔

我现在已经懒得折腾tail -f了,干脆将整个日志文件用cgi-bin上传到小鸡上得了,只不过小鸡那边需要完全覆盖而非之前设定的追加🤔这样其实和上传到discord drive也没什么本质上的区别,只不过我每两秒上传一次而已🤔而且这么搞我那边就别想用tail -f来实时看进度了,毕竟现在每两秒日志文件就会被覆盖一遍,按照tail的搞法整个文件都会重新打印一遍🤔

也许我可以写个什么申必脚本在接收到的stdin和本地文件之间迫真比较,并将多出的部分追加到本地文件的后面而非直接覆盖整个文件,这样也许tail -f还能用,只不过便乘了每两秒更新一次而已(确信🤔

但无论如何,至少我可以半实时地看日志了,再怎么说也比搞完才能看日志好(大嘘🤔

AYAYA

在我一番迫真查stack exchange后,我找到了找出上传到小鸡的新日志文件(和原来的日志文件相比)新增内容的申必代码了,就是:diff --changed-group-format='%>' --unchanged-group-format=''🤔现在这个日志远程传送的脚本非常完美了,我没有用到禁忌(大嘘)的ssh,没有用到睾贵的ipv4 vps,我只用了一台ipv6垃圾鸡套cloudflare,就完成了这套玩意🤔接下来也许我可以去整什么onedrive转三盘还是双盘来着,等等,我寻思度盘还是单独用某台大盘鸡上传得了(恼🤔

接下来还有什么antics可以搞一搞?也许我可以把cloudflare worker版的任意url转guilded(单文件)脚本改写成bash版并cgi-bin化,然后要么放在我那台小鸡上,要么放在我白嫖的那个webhost上🤔