name: Linux

on:
    push:
        branches:
            - '**'
        paths-ignore:
            - .github/workflows/macos.yml
            - .github/workflows/windows.yml
        tags:
            - 'v[0-9]+.[0-9]+.[0-9]+'
            - 'v[0-9]+.[0-9]+.[0-9]+rc[0-9]+'
    pull_request:
        branches:
            - '**'
        paths-ignore:
            - .github/workflows/macos.yml
            - .github/workflows/windows.yml

    workflow_dispatch:

# Declare default permissions as read only.
permissions: read-all

jobs:

    build:

        runs-on: ${{ matrix.os }}

        strategy:
            matrix:
                os: [ubuntu-latest]
                tds-version: [7.1, 7.2, 7.3, 7.4]
                mssql-version: [2019, 2022]

        #continue-on-error: true

        env:
            PREFIX: /tmp/freetds
            FREETDSCONF: /tmp/freetds/freetds.conf.local
            TDSDUMP: /tmp/freetds/freetds.log
            TDSDUMPCONFIG: /tmp/freetds/freetds-DUMP-CONFIG.log
            TDSPWDSRV: local
            TDSPWDDB: tempdb
            TDSPWDUID: sa
            TDSPWDPWD: sqlServerPassw0rd
            TDSPORT: 1433
            TDSVER: ${{ matrix.tds-version }}
            TDSPWDFILE: /tmp/freetds.pwd

        services:
            SQLServer:
                image: mcr.microsoft.com/mssql/server:${{ matrix.mssql-version }}-latest
                env:
                    ACCEPT_EULA: Y
                    SA_PASSWORD: ${{ env.TDSPWDPWD }}
                ports:
                    - 1433:1433

        steps:

        - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

        - name: Install dependencies
          run: |
            sudo apt-get update
            sudo apt-get install \
                        --no-install-recommends \
                        autoconf automake libtool gettext gperf \
                        libgnutls28-dev \
                        libssl-dev libkrb5-dev \
                        unixodbc-dev pkg-config

        - name: configure
          run: |
            autoreconf -i
            ./configure --with-gnutls  --enable-silent-rules \
                    --prefix=${PREFIX} \
                    --with-openssl=yes \
                    --with-gnutls=yes \
                    --enable-krb5 \
                    --with-tdsver=${TDSVER}

        - name: make
          run: make

        - name: install
          run: make install

        - name: Show settings
          run: ${PREFIX}/bin/tsql -C

        - name: make configs
          run: |
            mkdir -p `dirname ${FREETDSCONF}`
            echo -e "\n
            [global]\n
            port = ${TDSPORT}\n
            tds version = ${TDSVER}\n
            encryption = require\n
            [local]\n
            host = 127.0.0.1\n" >> ${FREETDSCONF}
            ./misc/write_PWD_from_env_vars.sh

        - name: make check
          run: |
            make -C src/replacements/unittests check VERBOSE=1
            make -C src/utils/unittests check VERBOSE=1
            make -C src/tds/unittests check VERBOSE=1
            make -C src/dblib/unittests check VERBOSE=1
            make -C src/ctlib/unittests check VERBOSE=1
            make -C src/odbc/unittests check VERBOSE=1
            make -C src/apps/unittests check VERBOSE=1

        - name: Archive test results on failure
          if: failure()
          uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
          with:
            name: test-logs
            path: |
                src/replacements/unittests/test-suite.log
                src/utils/unittests/test-suite.log
                src/tds/unittests/test-suite.log
                src/dblib/unittests/test-suite.log
                src/ctlib/unittests/test-suite.log
                src/odbc/unittests/test-suite.log
                src/apps/unittests/test-suite.log
                /tmp/freetds/*