3131 runs-on : ubuntu-latest
3232
3333 steps :
34- - uses : actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
34+ - uses : actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
3535 with :
3636 token : ${{ (github.repository == 'ruby/ruby' && !startsWith(github.event_name, 'pull')) && secrets.MATZBOT_AUTO_UPDATE_TOKEN || secrets.GITHUB_TOKEN }}
3737
8282 echo gems=$gems >> $GITHUB_OUTPUT
8383 echo update=${news:-$gems} >> $GITHUB_OUTPUT
8484
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+ EMAIL : svn-admin@ruby-lang.org
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+
85146 - name : Install libraries
86147 uses : ./.github/actions/setup/ubuntu
87148 if : ${{ steps.diff.outputs.gems }}
@@ -107,27 +168,14 @@ jobs:
107168 TEST_BUNDLED_GEMS_ALLOW_FAILURES : ' '
108169 if : ${{ steps.diff.outputs.gems }}
109170
110- - name : Commit
171+ - name : Push
111172 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
119173 git push origin ${GITHUB_REF#refs/heads/}
120- env :
121- TODAY : ${{ steps.bundled_gems.outputs.latest_date || env.TODAY }}
122- EMAIL : svn-admin@ruby-lang.org
123- GIT_AUTHOR_NAME : git
124- GIT_COMMITTER_NAME : git
125- gems : ${{ steps.diff.outputs.gems }}
126174 if : >-
127175 ${{
128176 github.repository == 'ruby/ruby' &&
129177 !startsWith(github.event_name, 'pull') &&
130- steps.diff.outputs.update
178+ steps.commit.outcome == 'success'
131179 }}
132180
133181 - uses : ./.github/actions/slack
0 commit comments