rapid7/metasploit-framework

View on GitHub
.github/workflows/verify.yml

Summary

Maintainability
Test Coverage
name: Verify

# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
permissions:
  actions: none
  checks: none
  contents: none
  deployments: none
  id-token: none
  issues: none
  discussions: none
  packages: none
  pages: none
  pull-requests: none
  repository-projects: none
  security-events: none
  statuses: none

on:
  push:
    branches-ignore:
      - gh-pages
      - metakitty
      - weekly-dependency-updates
  pull_request:
    branches-ignore:
      - weekly-dependency-updates

jobs:
  build:
    runs-on: ubuntu-latest
    timeout-minutes: 40
    name: Docker Build
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: docker-compose build
        run: |
          curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > docker-compose
          chmod +x docker-compose
          sudo mv docker-compose /usr/bin

          /usr/bin/docker-compose build

  test:
    runs-on: ${{ matrix.os }}
    timeout-minutes: 40

    services:
      postgres:
        image: postgres:9.6
        ports: ["5432:5432"]
        env:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres
        options: >-
          --health-cmd pg_isready
          --health-interval 10s
          --health-timeout 5s
          --health-retries 5

    strategy:
      fail-fast: true
      matrix:
        ruby:
          - '3.0'
          - '3.1'
          - '3.2'
          - '3.3.0-preview3'
        os:
          - ubuntu-20.04
          - ubuntu-latest
        exclude:
          - { os: ubuntu-latest, ruby: '3.0' }
        include:
          - os: ubuntu-latest
            ruby: '3.1'
            test_cmd: 'bundle exec rake rspec-rerun:spec SPEC_OPTS="--tag content" MSF_FEATURE_DEFER_MODULE_LOADS=1'
        test_cmd:
          - bundle exec rake rspec-rerun:spec SPEC_OPTS="--tag content"
          - bundle exec rake rspec-rerun:spec SPEC_OPTS="--tag ~content"
          # Used for testing the remote data service
          - bundle exec rake rspec-rerun:spec SPEC_OPTS="--tag content" REMOTE_DB=1
          - bundle exec rake rspec-rerun:spec SPEC_OPTS="--tag ~content" REMOTE_DB=1

    env:
      RAILS_ENV: test

    name: ${{ matrix.os }} - Ruby ${{ matrix.ruby }} - ${{ matrix.test_cmd }}
    steps:
      - name: Install system dependencies
        run: sudo apt-get install -y --no-install-recommends libpcap-dev graphviz

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

      - name: Setup Ruby
        env:
          BUNDLE_WITHOUT: "coverage development pcap"
          # Nokogiri doesn't release pre-compiled binaries for preview versions of Ruby; So force compilation with BUNDLE_FORCE_RUBY_PLATFORM
          BUNDLE_FORCE_RUBY_PLATFORM: "${{ contains(matrix.ruby, 'preview') && 'true' || 'false' }}"
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: '${{ matrix.ruby }}'
          bundler-cache: true

      - name: Create database
        run: |
          cp config/database.yml.github_actions config/database.yml
          bundle exec rake --version
          bundle exec rake db:create
          bundle exec rake db:migrate
          # fail build if db/schema.rb update is not committed
          git diff --exit-code db/schema.rb

      - name: ${{ matrix.test_cmd }}
        run: |
          echo "${CMD}"
          bash -c "${CMD}"
        env:
          CMD: ${{ matrix.test_cmd }}