FEATURE: Add an AST normalization pass for target-format nesting rules #319
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 }} |