@@ -100,6 +100,48 @@ jobs:
100100 gems : ${{ steps.diff.outputs.gems }}
101101 if : ${{ steps.diff.outputs.update }}
102102
103+ - name : Fetch more logs
104+ id : logs
105+ run : |
106+ file=gems/bundled_gems days=30
107+ { echo days=$days; echo file=$file; } >> $GITHUB_OUTPUT
108+ since=$(date --date=-$[days * 2 + 10]day +'%F')
109+ set -x
110+ git sparse-checkout set --no-cone /$file
111+ git fetch --shallow-since="$since" --no-tags origin ${GITHUB_REF}
112+
113+ - name : Development revision of bundled gems
114+ run : |
115+ #!ruby
116+ file = ENV["file"]
117+ days = ENV["days"].to_i
118+ today = Time.new("#{ENV['TODAY']}T00:00:00Z").to_i
119+ limit = today - days * 86400
120+
121+ ok = true
122+ IO.popen(%W"git blame --line-porcelain -- #{file}") do |blame|
123+ while head = blame.gets("\n\t") and s = blame.gets
124+ next unless (gem = s.split(/\s+|#.*/)).size > 3
125+ time = head[/^committer-time \K\d+/].to_i
126+ next if (d = limit - time) <= 0
127+ d /= 86400
128+ line = head[/\A\h+ \d+ \K\d+/].to_i
129+ level = if d < days; 'warning'; else ok = false; 'error'; end
130+ d += days
131+ puts "::#{level} file=#{file},line=#{line},title=Older than #{d} days::#{gem[0]} #{gem[3]}"
132+ end
133+ end
134+ # exit ok
135+ shell : ruby {0}
136+ env :
137+ file : ${{ steps.logs.outputs.file }}
138+ days : ${{ steps.logs.outputs.days }}
139+
140+ - name : Restore sparse checkout
141+ run : |
142+ git sparse-checkout disable
143+ if : always()
144+
103145 - name : Install libraries
104146 uses : ./.github/actions/setup/ubuntu
105147 if : ${{ steps.diff.outputs.gems }}
0 commit comments