name: CI

on:
  push:
  pull_request:
  schedule:
    - cron: "30 14 * * *"

jobs:
  ruby-versions:
    uses: ruby/actions/.github/workflows/ruby_versions.yml@master
    with:
      engine: cruby
      min_version: 2.6

  reline:
    needs: ruby-versions
    name: >-
      reline ${{ matrix.os }} ${{ matrix.ruby }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        ruby: ${{ fromJson(needs.ruby-versions.outputs.versions) }}
        os: [ubuntu-latest, macos-latest, windows-latest]
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4
      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ matrix.ruby }}
      - name: Install dependencies
        run: bundle install
      - name: rake test
        env:
          TERM: xterm-256color
        run: bundle exec rake test
      - name: rake test (frozen string literal)
        env:
          TERM: xterm-256color
        run: bundle exec rake test RUBYOPT="--enable-frozen-string-literal"

  readline:
    name: >-
      readline ${{ matrix.ruby }}  ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - { ruby: head, os: ubuntu-latest }
          - { ruby: head, os: macos-latest }
          - { ruby: mingw, os: windows-latest }
          - { ruby: mswin, os: windows-latest }
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4
      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ matrix.ruby }}
      - name: Install dependencies
        run: bundle install
      - name: Download test readline
        run: ruby download-test_readline.rb
      - name: rake test
        run: bundle exec rake test
      - name: rake ci-test
        env:
          TEST_READLINE_OR_RELINE: Reline
          TERM: xterm-256color
        run: bundle exec rake ci-test

  irb:
    needs: ruby-versions
    name: >-
      irb ${{ matrix.ruby }}  ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        ruby: ${{ fromJson(needs.ruby-versions.outputs.versions) }}
        os: [ubuntu-latest]
        exclude:
          - ruby: 2.6
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4
      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ matrix.ruby }}
          # Added to make Ruby 2.7 correctly require installed default gems, like `pp`.
          rubygems: latest
      - name: Install libvterm
        run: |
          sudo apt install -y libtool-bin
          wget http://www.leonerd.org.uk/code/libvterm/libvterm-0.1.4.tar.gz
          tar xvzf libvterm-0.1.4.tar.gz
          cd libvterm-0.1.4
          sed -i -e 's/^PREFIX=.*$/PREFIX=\/usr/g' Makefile
          make
          sudo make install
      - name: Install dependencies
        run: bundle install
      - name: Install reline
        run: rake install
      - name: Download ruby/irb
        run: |
          git clone https://github.com/ruby/irb
      - name: Run irb test
        working-directory: ./irb
        run: |
          bundle install
          bundle exec rake test
      - name: Run irb yamatanooroti test
        working-directory: ./irb
        env:
          WITH_VTERM: 1
        run: |
          gem rdoc --all --ri --no-rdoc
          bundle install
          bundle exec rake test_yamatanooroti

  vterm-yamatanooroti:
    needs: ruby-versions
    name: >-
      vterm-yamatanooroti ${{ matrix.os }} ${{ matrix.ruby }}
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        ruby: ${{ fromJson(needs.ruby-versions.outputs.versions) }}
        os: [ubuntu-latest]
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4
      - name: Set up Ruby
        uses: ruby/setup-ruby@v1
        with:
          ruby-version: ${{ matrix.ruby }}
      - name: Install libvterm
        run: |
          sudo apt-get install -y libvterm-dev
      - name: Install dependencies
        run: WITH_VTERM=1 bundle install
      - name: rake test_yamatanooroti
        run: WITH_VTERM=1 bundle exec rake test_yamatanooroti
