name: ci-build

on:
  push:
    branches: [ master ]
    tags: ['*']
  pull_request:
    branches: [ master ]

jobs:
  coverage:
    runs-on: self-hosted
    steps:
    - uses: actions/checkout@v2
#    - name: Update apt
#      run: sudo apt-get update
#    - name: Install packages
#      run: sudo apt-get install libncursesw5-dev libpcre++-dev libsqlite3-dev libbz2-dev libcurl4-openssl-dev libreadline-dev zlib1g-dev lcov
#    - name: install cpp-coveralls
#      run: pip install --user cpp-coveralls
    - name: autogen
      run: ./autogen.sh
    - name: configure
      run: ./configure --disable-static --enable-code-coverage --enable-debug CFLAGS=-g3 CXXFLAGS=-g3
    - name: make
      run: make -j3
    - name: make check
      run: make check
    - name: upload cover
      env:
        COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
        TRAVIS_JOB_ID: ${{ github.run_id }}-${{ github.run_number }}
      run: >-
        coveralls
        --exclude src/doctest.hh
        --exclude src/fmtlib
        --exclude src/ghc
        --exclude src/k_merge_tree.h
        --exclude src/mapbox
        --exclude src/pugixml
        --exclude src/base/result.h
        --exclude src/safe
        --exclude src/spookyhash
        --exclude src/third-party
        --exclude src/ww898
        --exclude src/yajl
        --exclude test
        --exclude src/data_scanner_re.cc
        --gcov-options '\-lp'

  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Update apt
        run: sudo apt-get update
      - name: Install packages
        run: >-
          sudo apt-get install -y
          make
          automake
          autoconf
          g++
          libpcre2-dev
          libpcre3-dev
          libncurses-dev
          libsqlite3-dev
          libbz2-dev
          libcurl4-openssl-dev
          libreadline-dev
          tshark
          zlib1g-dev
      - name: autogen
        run: ./autogen.sh
      - name: configure
        run: ./configure --disable-static
      - name: make
        run: make -j4
      - name: make distcheck
        run: make distcheck -j4 || (test -e lnav-*/_build/sub/src/tailer/test-suite.log && cat lnav-*/_build/sub/src/tailer/test-suite.log && false) || (test -e lnav-*/_build/sub/test/test-suite.log && cat lnav-*/_build/sub/test/test-suite.log && false)
      - name: Upload a Build Artifact
        uses: actions/upload-artifact@v2
        with:
          # Artifact name
          name: lnav-tot-linux-64bit.zip
          # A file, directory or wildcard pattern that describes what to upload
          path: src/lnav

  build-windows:
    runs-on: windows-latest
    strategy:
      fail-fast: false
      matrix:
        include:
          - { icon: '🟦', sys: MSYS }
    name: ${{ matrix.icon }} ${{ matrix.sys }}
    defaults:
      run:
        shell: msys2 {0}
    steps:
    - name: '🧰 Checkout'
      uses: actions/checkout@v2
      with:
        fetch-depth: 0
    - name: '${{ matrix.icon }} Setup MSYS2'
      uses: msys2/setup-msys2@v2
      with:
        msystem: ${{matrix.sys}}
        update: true
        install: >-
          autoconf
          automake
          gcc
          git
          make
          zip
          msys/libarchive-devel
          msys/libbz2-devel
          msys/libcurl-devel
          msys/libidn2-devel
          msys/liblzma-devel
          msys/libreadline-devel
          msys/libsqlite-devel
          msys/libunistring-devel
          msys/ncurses-devel
          msys/pcre2-devel
          msys/zlib-devel
    - name: '🔧 Generate and configure'
      run: |
        set -x
        ./autogen.sh
        mkdir -p ../lnav-build
        cd ../lnav-build
        export PREFIX=$PWD/lnav
        ../lnav/configure \
                    --enable-static \
                    LDFLAGS="-static" \
                    CPPFLAGS="-I../src -I../../lnav/src -I../../lnav/src/fmtlib -O2 -DNCURSES_STATIC" \
                    CXXFLAGS="-fPIC" \
                    CFLAGS="-fPIC" \
                    LIBS="-larchive -lssh2 -llzma -llz4 -lz -lzstd -lssl -lcrypto -liconv -lunistring -lbrotlicommon" \
                    --sysconfdir=/etc \
                    --prefix=$PREFIX || cat config.log
    - name: '🚧 Make (do not use -j)'
      run: |
        set -x
        cd ../lnav-build
        make CFLAGS="-c"
        strip -s src/lnav.exe
    - name: '📦 Package for distribution'
      run: |
        set -x
        cd ../lnav-build
        export PREFIX=$PWD/lnav
        make install
        ldd $PREFIX/bin/lnav.exe | grep /usr | cut -d' ' -f3 | xargs -I {} cp {} $PREFIX/bin/
        mkdir -p lib/terminfo/78
        cp -r /usr/lib/terminfo/78/xterm-256color lib/terminfo/78/
        zip -r ../lnav/lnav-${{ github.ref_name }}-windows-amd64.zip lnav lib
    - name: '💉 Basic test'
      run: |
        set -x
        cd ../lnav-build
        export PREFIX=$PWD/lnav
        $PREFIX/bin/lnav.exe -n ../lnav/test/logfile_multiline.0
    - name: '⬆️ Upload a Build Artifact'
      uses: actions/upload-artifact@v2
      with:
        name: lnav-${{ github.ref_name }}-windows-amd64.zip
        path: lnav-${{ github.ref_name }}-windows-amd64.zip
        if-no-files-found: error
#    - name: '🎁 Create Release'
#      id: create_release
#      uses: actions/create-release@v1
#      env:
#        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
#      with:
#        tag_name: ${{ github.ref_name }}
#        release_name: Release ${{ github.ref_name }}
#        draft: false
#        prerelease: false
#    - name: '⬆️ Upload Release Asset'
#      id: upload-release-asset
#      uses: actions/upload-release-asset@v1
#      env:
#        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
#      with:
#        upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps
#        asset_path: ./lnav-${{ github.ref_name }}-windows-amd64.zip
#        asset_name: lnav-${{ github.ref_name }}-windows-amd64.zip
#        asset_content_type: application/zip
