31
31
runs-on : ubuntu-latest
32
32
33
33
steps :
34
- - uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
34
+ - uses : actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
35
35
with :
36
36
token : ${{ (github.repository == 'ruby/ruby' && !startsWith(github.event_name, 'pull')) && secrets.MATZBOT_AUTO_UPDATE_TOKEN || secrets.GITHUB_TOKEN }}
37
37
82
82
echo gems=$gems >> $GITHUB_OUTPUT
83
83
echo update=${news:-$gems} >> $GITHUB_OUTPUT
84
84
85
+ - name : Commit
86
+ id : commit
87
+ run : |
88
+ git pull --ff-only origin ${GITHUB_REF#refs/heads/}
89
+ message="Update bundled gems list"
90
+ if [ -z "${gems}" ]; then
91
+ git commit --message="[DOC] ${message} at ${GITHUB_SHA:0:30}"
92
+ else
93
+ git commit --message="${message} as of ${TODAY}"
94
+ fi
95
+ env :
96
+ TODAY : ${{ steps.bundled_gems.outputs.latest_date || env.TODAY }}
97
+
98
+ GIT_AUTHOR_NAME : git
99
+ GIT_COMMITTER_NAME : git
100
+ gems : ${{ steps.diff.outputs.gems }}
101
+ if : ${{ steps.diff.outputs.update }}
102
+
103
+ - name : Development revision of bundled gems
104
+ run : |
105
+ #!ruby
106
+ file = "gems/bundled_gems"
107
+
108
+ SECONDS_IN_DAY = 86400
109
+ today = Time.new("#{ENV['TODAY']}Z")
110
+ if !(december = today.month == 12)
111
+ days = 30
112
+ elsif (days = 26 - today.day).positive?
113
+ days += 4
114
+ else
115
+ puts "::info:: just after released"
116
+ exit
117
+ end
118
+
119
+ since = "#{today.year-1}-12-26"
120
+ ref = ENV['GITHUB_REF']
121
+ puts "::group::\e[94mfetching \e[1m#{file}\e[22m since \e[1m#{since}\e[22m from \e[1m#{ref}\e[m"
122
+ system(*%W[git fetch --shallow-since=#{since} --no-tags origin #{ref}], exception: true)
123
+ puts "::endgroup::"
124
+
125
+ puts "\e[94mchecking development version bundled gems older than \e[1m#{days}\e[22m days\e[m"
126
+ limit = today.to_i - days * SECONDS_IN_DAY
127
+ old = 0
128
+ IO.popen(%W"git blame --line-porcelain -- #{file}") do |blame|
129
+ while head = blame.gets("\n\t") and s = blame.gets
130
+ next unless (gem = s.split(/\s+|#.*/)).size > 3
131
+ time = head[/^committer-time \K\d+/].to_i
132
+ next if (d = limit - time) <= 0
133
+ d /= SECONDS_IN_DAY
134
+ line = head[/\A\h+ \d+ \K\d+/].to_i
135
+ level = if d < days; 'warning'; else old += 1; 'error'; end
136
+ d += days
137
+ puts "::#{level} file=#{file},line=#{line},title=Older than #{d} days::#{gem[0]} #{gem[3]}"
138
+ end
139
+ end
140
+ abort "::error title=Too long-standing gems::The release comes soon." if december and old.nonzero?
141
+ shell : ruby {0}
142
+ env :
143
+ file : ${{ steps.logs.outputs.file }}
144
+ days : ${{ steps.logs.outputs.days }}
145
+
85
146
- name : Install libraries
86
147
uses : ./.github/actions/setup/ubuntu
87
148
if : ${{ steps.diff.outputs.gems }}
@@ -107,27 +168,14 @@ jobs:
107
168
TEST_BUNDLED_GEMS_ALLOW_FAILURES : ' '
108
169
if : ${{ steps.diff.outputs.gems }}
109
170
110
- - name : Commit
171
+ - name : Push
111
172
run : |
112
- git pull --ff-only origin ${GITHUB_REF#refs/heads/}
113
- message="Update bundled gems list"
114
- if [ -z "${gems}" ]; then
115
- git commit --message="[DOC] ${message} at ${GITHUB_SHA:0:30}"
116
- else
117
- git commit --message="${message} as of ${TODAY}"
118
- fi
119
173
git push origin ${GITHUB_REF#refs/heads/}
120
- env :
121
- TODAY : ${{ steps.bundled_gems.outputs.latest_date || env.TODAY }}
122
-
123
- GIT_AUTHOR_NAME : git
124
- GIT_COMMITTER_NAME : git
125
- gems : ${{ steps.diff.outputs.gems }}
126
174
if : >-
127
175
${{
128
176
github.repository == 'ruby/ruby' &&
129
177
!startsWith(github.event_name, 'pull') &&
130
- steps.diff.outputs.update
178
+ steps.commit.outcome == 'success'
131
179
}}
132
180
133
181
- uses : ./.github/actions/slack
0 commit comments