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系统里是这样(确信🤔

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

发表评论