codevise/pageflow

View on GitHub
.github/workflows/tests.yml

Summary

Maintainability
Test Coverage
name: tests
on: [push, pull_request]

env:
  RAILS_ENV: test
  PAGEFLOW_DB_HOST: 127.0.0.1

jobs:
  rspec:
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        include:
          - engine-name: pageflow
            ruby-version: 3.2
            engine-directory: .
            rspec-command: bin/rspec --tag ~js
            install-audiowaveform: true

          - engine-name: pageflow
            ruby-version: 3.2
            engine-directory: .
            rspec-command: bin/rspec-with-retry --tag js

          - engine-name: pageflow_paged
            ruby-version: 3.2
            engine-directory: entry_types/paged
            plugin-name: pageflow_paged
            rspec-command: bin/rspec

          - engine-name: pageflow_scrolled
            ruby-version: 3.2
            engine-directory: entry_types/scrolled
            plugin-name: pageflow_scrolled
            rspec-command: bin/rspec --tag ~js

          - engine-name: pageflow_scrolled
            ruby-version: 3.2
            engine-directory: entry_types/scrolled
            plugin-name: pageflow_scrolled
            rspec-command: bin/rspec-with-retry-on-timeout --tag js

    services:
      mysql:
        image: mysql:5.7
        env:
          MYSQL_ALLOW_EMPTY_PASSWORD: yes
        ports:
          - 3306:3306
        # Set health checks to wait until mysql has started
        options: >-
          --health-cmd="mysqladmin ping"
          --health-interval=10s
          --health-timeout=5s
          --health-retries 5

      redis:
        image: redis
        # Set health checks to wait until redis has started
        options: >-
          --health-cmd "redis-cli ping"
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

    steps:
    - uses: actions/checkout@v2

    # Caching

    - name: Set up cache for Bundler
      uses: actions/cache@v2
      with:
        path: vendor/bundle
        key: ${{ runner.os }}-ruby-${{ matrix.ruby-version }}-gems-${{ hashFiles('**/*.gemspec') }}-${{ hashFiles('**/Gemfile') }}
        restore-keys: |
          ${{ runner.os }}-ruby-${{ matrix.ruby-version }}-gems-

    - name: Get yarn cache directory path
      id: yarn-cache-dir-path
      run: echo "::set-output name=dir::$(yarn cache dir)"

    - name: Set up cache for Yarn
      uses: actions/cache@v2
      with:
        path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
        key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
        restore-keys: |
          ${{ runner.os }}-yarn-

    # Ruby/Node

    - name: Set up Ruby ${{ matrix.ruby-version }}
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: ${{ matrix.ruby-version }}

    - name: Use Node.js 18
      uses: actions/setup-node@v1
      with:
        node-version: 18

    # Dependencies

    - name: Install libvips package for image processing
      run: |
        sudo apt-get update
        sudo apt-get install libvips-dev

    - name: Install audiowaveform package
      if: ${{ matrix.install-audiowaveform == true}}
      run: |
        sudo add-apt-repository ppa:chris-needham/ppa
        sudo apt-get update
        sudo apt-get install audiowaveform

    - name: Bundle install
      run: |
        bundle config path vendor/bundle
        bundle install --jobs 4 --retry 3

    - name: Yarn install
      run: |
        yarn install

    # Build

    - name: Build packages
      run: |
        bin/build-packages

    - name: Generate dummy app
      working-directory: ${{ matrix.engine-directory }}
      env:
        PAGEFLOW_PLUGIN_ENGINE: ${{ matrix.plugin-name }}
      run: |
        bin/rake ${{ matrix.engine-name }}:dummy

    - name: Precompile
      working-directory: ${{ matrix.engine-directory }}
      run: |
        WEBPACKER_PRECOMPILE=false SHAKAPACKER_PRECOMPILE=false bin/rake app:assets:precompile

    # Test

    - name: Run tests
      working-directory: ${{ matrix.engine-directory }}
      run: ${{ matrix.rspec-command }}

  jest:
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        include:
          - name: pageflow
            package-directory: package
          - name: pageflow-paged
            package-directory: entry_types/paged/packages/pageflow-paged
          - name: pageflow-paged-react
            package-directory: entry_types/paged/packages/pageflow-paged-react
          - name: pageflow-scrolled
            package-directory: entry_types/scrolled/package

    steps:
    - uses: actions/checkout@v2

    - name: Get yarn cache directory path
      id: yarn-cache-dir-path
      run: echo "::set-output name=dir::$(yarn cache dir)"

    - name: Set up cache for Yarn
      uses: actions/cache@v2
      with:
        path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
        key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
        restore-keys: |
          ${{ runner.os }}-yarn-

    - name: Set up Node.js 18
      uses: actions/setup-node@v1
      with:
        node-version: 18

    - name: Yarn install
      run: |
        yarn install
        (cd entry_types/paged/packages/pageflow-paged-react; yarn install)

    - name: Build packages
      run: |
        yarn run build

    - name: Run ${{ matrix.name }} tests
      working-directory: ${{ matrix.package-directory }}
      run: |
        yarn test

  trigger-edge-build:
    if: ${{ github.ref == 'refs/heads/master' && github.repository == 'codevise/pageflow' }}
    runs-on: ubuntu-latest
    steps:
    - name: Trigger GitLab workflow
      run: |
        curl -X POST \
        -F token=${{ secrets.GITLAB_WORKFLOW_TRIGGER_TOKEN }} \
        -F ref=master \
        https://gitlab.codevise.de/api/v4/projects/180/trigger/pipeline