diff options
Diffstat (limited to '.github/workflows/check_misc.yml')
-rw-r--r-- | .github/workflows/check_misc.yml | 100 |
1 files changed, 60 insertions, 40 deletions
diff --git a/.github/workflows/check_misc.yml b/.github/workflows/check_misc.yml index 2872c96ffd..7996ddb4c0 100644 --- a/.github/workflows/check_misc.yml +++ b/.github/workflows/check_misc.yml @@ -1,34 +1,60 @@ -name: Miscellaneous checks -on: [push, pull_request] +name: Misc +on: [push, pull_request, merge_group] concurrency: group: ${{ github.workflow }} / ${{ startsWith(github.event_name, 'pull') && github.ref_name || github.sha }} cancel-in-progress: ${{ startsWith(github.event_name, 'pull') }} +permissions: + contents: read + jobs: checks: + name: Miscellaneous checks + + permissions: + contents: write # for Git to git push + runs-on: ubuntu-latest + steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 + with: + token: ${{ (github.repository == 'ruby/ruby' && !startsWith(github.event_name, 'pull')) && secrets.MATZBOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + + - uses: ./.github/actions/setup/directories + with: + makeup: true + # Skip overwriting MATZBOT_GITHUB_TOKEN + checkout: '' # false (ref: https://github.com/actions/runner/issues/2238) + - name: Check if C-sources are US-ASCII run: | - ! grep -r -n '[^ -~]' *.[chy] include internal win32/*.[ch] + grep -r -n --include='*.[chyS]' --include='*.asm' $'[^\t-~]' -- . && exit 1 || : + - name: Check for trailing spaces run: | - ! git grep -n '[ ]$' '*.rb' '*.[chy]' + git grep -I -n $'[\t ]$' -- '*.rb' '*.[chy]' '*.rs' '*.yml' && exit 1 || : + git grep -n $'^[\t ][\t ]*$' -- '*.md' && exit 1 || : + + - name: Check for bash specific substitution in configure.ac + run: | + git grep -n '\${[A-Za-z_0-9]*/' -- configure.ac && exit 1 || : + - name: Check for header macros run: | - ! for header in ruby/*.h; do \ - git grep -l -F -e $header -e HAVE_`echo $header | tr a-z./ A-Z__` -- . > /dev/null || echo $header - done | grep -F . + fail= + for header in ruby/*.h; do + git grep -l -F -e $header -e HAVE_`echo $header | tr a-z./ A-Z__` -- . > /dev/null && continue + fail=1 + echo $header + done + exit $fail working-directory: include - - uses: actions/cache@v2 - with: - path: .downloaded-cache - key: downloaded-cache-${{ github.sha }} - restore-keys: | - downloaded-cache + - id: gems + run: true + if: ${{ github.ref == 'refs/heads/master' }} - name: Download previous gems list run: | @@ -36,9 +62,11 @@ jobs: mkdir -p .downloaded-cache ln -s .downloaded-cache/$data . curl -O -R -z ./$data https://stdgems.org/$data + if: ${{ steps.gems.outcome == 'success' }} - name: Make default gems list run: | + #!ruby require 'rubygems' $:.unshift "lib" rgver = File.foreach("lib/rubygems.rb") do |line| @@ -53,38 +81,20 @@ jobs: f.puts gems end shell: ruby --disable=gems {0} + if: ${{ steps.gems.outcome == 'success' }} - name: Maintain updated gems list in NEWS run: | - require 'json' - news = File.read("NEWS.md") - prev = news[/since the \*+(\d+\.\d+\.\d+)\*+/, 1] - prevs = [prev, prev.sub(/\.\d+\z/, '')] - %W[default].each do |type| - last = JSON.parse(File.read("#{type}_gems.json"))['gems'].filter_map do |g| - v = g['versions'].values_at(*prevs).compact.first - g = g['gem'] - g = 'RubyGems' if g == 'rubygems' - [g, v] if v - end.to_h - changed = File.foreach("gems/#{type}_gems").filter_map do |l| - next if l.start_with?("#") - g, v = l.split(" ", 3) - [g, v] unless last[g] == v - end - news.sub!(/^\*( +)The following #{type} gems? are updated\.\n\K(?: \1\* .*\n)*/) do - mark = "#{$1} * " - changed.map {|g, v|"#{mark}#{g} #{v}\n"}.join("") - end or next - File.write("NEWS.md", news) - end - shell: ruby {0} + ruby tool/update-NEWS-gemlist.rb default + if: ${{ steps.gems.outcome == 'success' }} - name: Check diffs id: diff run: | - git diff --color --no-ext-diff --ignore-submodules --exit-code NEWS.md - continue-on-error: true + git diff --color --no-ext-diff --ignore-submodules --exit-code NEWS.md || + echo update=true >> $GITHUB_OUTPUT + if: ${{ steps.gems.outcome == 'success' }} + - name: Commit run: | git pull --ff-only origin ${GITHUB_REF#refs/heads/} @@ -94,4 +104,14 @@ jobs: EMAIL: svn-admin@ruby-lang.org GIT_AUTHOR_NAME: git GIT_COMMITTER_NAME: git - if: ${{ github.repository == 'ruby/ruby' && !startsWith(github.event_name, 'pull') && steps.diff.outcome == 'failure' }} + if: >- + ${{ + github.repository == 'ruby/ruby' && + !startsWith(github.event_name, 'pull') && + steps.diff.outputs.update + }} + + - uses: ./.github/actions/slack + with: + SLACK_WEBHOOK_URL: ${{ secrets.SIMPLER_ALERTS_URL }} # ruby-lang slack: ruby/simpler-alerts-bot + if: ${{ failure() }} |