Skip to content

FEATURE: Add an AST normalization pass for target-format nesting rules #319

FEATURE: Add an AST normalization pass for target-format nesting rules

FEATURE: Add an AST normalization pass for target-format nesting rules #319

Workflow file for this run

name: CI
on:
push:
branches:
- main
tags:
- v*
pull_request:
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v7
with:
persist-credentials: false
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '4.0'
bundler-cache: true
- name: Run RuboCop
run: bundle exec rubocop
- name: Check Ruby formatting with Syntax Tree
run: bundle exec stree check Gemfile Rakefile *.gemspec "lib/**/*.rb" "spec/**/*.rb"
test:
runs-on: ubuntu-latest
name: Ruby ${{ matrix.ruby }}
strategy:
fail-fast: false
matrix:
ruby:
- '3.3'
- '3.4'
- '4.0'
- 'jruby'
- 'truffleruby'
steps:
- name: Checkout
uses: actions/checkout@v7
with:
persist-credentials: false
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby }}
bundler-cache: true
- name: Run tests
run: bundle exec rake spec
mutation:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request' || (github.event_name == 'push' && github.ref == 'refs/heads/main')
steps:
- name: Checkout
uses: actions/checkout@v7
with:
persist-credentials: false
# `--since` walks git history; default shallow clone hides the base.
fetch-depth: 0
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '4.0'
bundler-cache: true
# On PR: mutate subjects changed since main.
# On push to main: mutate subjects changed by this push.
- name: Run mutant
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
since="origin/main"
else
since="${{ github.event.before }}"
# A force-push leaves `github.event.before` pointing to an
# unreachable commit; fall back to the previous commit on main.
if ! git cat-file -e "${since}^{commit}" 2>/dev/null; then
echo "Base ${since} not reachable; falling back to HEAD^"
since="HEAD^"
fi
fi
bin/mutant run --since "${since}"
publish:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
needs:
- lint
- test
- mutation
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v7
with:
# bin/generate-release-notes needs prior tags and the commits
# between them to build the changelog.
fetch-depth: 0
- name: Release Gem
uses: discourse/publish-rubygems-action@v3
env:
RUBYGEMS_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
GIT_EMAIL: team@discourse.org
GIT_NAME: discoursebot
- name: Create GitHub Release
run: |
VERSION=$(ruby -r ./lib/markbridge/version -e 'puts Markbridge::VERSION')
TAG="v${VERSION}"
if ! gh release view "${TAG}" > /dev/null 2>&1; then
NOTES=$(bin/generate-release-notes)
gh release create "${TAG}" --notes "${NOTES}" --latest
else
echo "Release ${TAG} already exists, skipping."
fi
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}