GitLab CIの設定をミスって~1kのゴミブランチを生成してしまったのでそれを消した123。
基本
$ git branch -r
$ git push --delete origin <branch>
問題点
~1kのブランチを手動でやるのはしんどい。 Juliaの
- glueとしてCmdが使いやすい
- async系がある
を活用したsolutionで対処した。
もう一つ、たくさん同時にやるとなんかssh-agent(自分はgpg agentを使ってる)関連でエラーが起きそうな感じ。 10個同時は行ける。
最終形態
using ProgressMeter
branches = read(open(`git branch -r`), String) |> split |> filter(contains("compathelper/")) .|> (s -> match(r"origin/(.*)$", s) |> first)
p = Progress(length(branches))
runnings = Channel{Bool}(10)
map(branches) do branch
@async begin
put!(runnings, true)
run(`git push --delete origin $branch`)
take!(runnings)
next!(p)
end
end .|> wait
プログレスバーとgitのログが混ざってて荒削り感あるけど、これ割といい感じと思う。
一応解説するとChannel
に数が決まってて、put!
やtake!
でブロックしつつ、実行中のjobはChannel
にものを置くことで最大10個走らせてる。
途中でエラーが起こると残りすべてのwait
が無意味になるので、errormonitor
とか使ったほうが良かった気がする。
あとrunnings
にゴミも溜まりそう。
結局試行錯誤で(大量の失敗をしつつ)そこそこの数のブランチを消してたので、本番では490個を5分ほどで消せてた。
あとがき
割と見られるリポジトリでやらかしてしまって恥ずかしい。
merge request作る人は!1xxx
なものを見ることになる。
CIは理解して書こうになった4。
あと今日中にリリースしようかなと思ってたけどまともなCIも走らなくなったので一旦お預け。
これリミットいつ解除されるのかな…
merge requestは?: 手動で20個ずつ消した ↩︎
何をやらかした?: CompatHelperをhttps://juliaregistries.github.io/CompatHelper.jl/stable/の通りに設定したら無限に走った。 ↩︎
どうやって止めた?: 最初は手動でmerge request閉じればjobがcancelされて止まるだろうと思ったが、大量のpendingがすでにいたので意味がなかった。pipelineを止めるのも時間がかかった。途中でgitlab-ci.yml書き換えればいいじゃんと思ったけど、すでに大量のpendingがいた。設定で止められないかちょっと見た感じわからなかった。最終的にlimit rateに達して止まった。 ↩︎
git+なものでGitHubやGitLabやその他もろもろ違っててめんどい。でも便利なのは確か。 ↩︎
Comments
Reply to this post (misskey) to leave a comment.
Reply