DannyBen/bashly

View on GitHub
.github/workflows/test.yml

Summary

Maintainability
Test Coverage
name: Test
on:
  pull_request:
  push: { branches: master }

jobs:
  test:
    name: Ruby ${{ matrix.ruby }}

    runs-on: ubuntu-latest

    env: 
      # For consistent sort order
      LC_ALL: en_US.UTF-8 

    strategy:
      matrix: { ruby: ['3.1', '3.2', '3.3'] }

    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Install OS dependencies
      run: sudo apt-get -y install mandoc

    # Rush needed for easy installation of stuff
    - name: Install rush
      run: curl -Ls http://get.dannyb.co/rush/setup | bash

    - name: Connect rush repo
      run: rush clone dannyben --shallow --default

    - name: Install pandoc
      run: rush get pandoc

    # libyaml needed for Ruby's YAML library
    - name: Install OS dependencies
      run: sudo apt-get -y install libyaml-dev

    - name: Setup Ruby
      uses: ruby/setup-ruby@v1
      with: 
        ruby-version: '${{ matrix.ruby }}'
        bundler-cache: true

    - name: Run tests
      run: bundle exec rspec

  static_analysis:
    name: Example files static analysis

    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    # Rush needed for easy installation of latest shfmt
    - name: Install rush
      run: curl -Ls http://get.dannyb.co/rush/setup | bash

    - name: Connect rush repo
      run: rush clone dannyben --shallow --default

    - name: Install shfmt
      run: rush get shfmt

    # libyaml needed for Ruby's YAML library
    - name: Install OS dependencies
      run: sudo apt-get -y install libyaml-dev

    - name: Setup Ruby
      uses: ruby/setup-ruby@v1
      with: 
        ruby-version: '3.1'
        bundler-cache: true

    - name: Generate all subjects
      run: bundle exec run examples regen

    - name: Run shellcheck tests
      run: bundle exec run shellcheck

    - name: Run shfmt tests
      run: bundle exec run shfmt

  json_schema:
    name: JSON schemas validation

    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    # Rush needed for easy installation of check-jsonschema
    - name: Install rush
      run: curl -Ls http://get.dannyb.co/rush/setup | bash

    - name: Connect rush repo
      run: rush clone dannyben --shallow --default

    - name: Install check-jsonschema
      run: rush get check-jsonschema

    # libyaml needed for Ruby's YAML library
    - name: Install OS dependencies
      run: sudo apt-get -y install libyaml-dev

    - name: Setup Ruby
      uses: ruby/setup-ruby@v1
      with: 
        ruby-version: '3.1'
        bundler-cache: true

    - name: Generate all subjects
      run: bundle exec run examples regen

    - name: Run schema tests
      run: bundle exec run schema all

  codespell:
    name: Spell check

    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Install OS dependencies
      run: sudo apt-get -y install codespell

    - name: Run codespell
      run: codespell

  docker:
    name: Docker smoke test

    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Build the image
      run: docker compose build bash

    - name: Test pandoc presence
      run: docker compose run pandoc-test