name: CI checks

on:
  push:
  pull_request:
    paths-ignore:
    - CODE_OF_CONDUCT.md
    - CONTRIBUTING.md
    - COPYING
    - NEWS
    - README.md
    - SECURITY.md
    branches:
    - main

jobs:
  meson:
    name: Build with Meson and gcc, and test
    runs-on: ubuntu-22.04
    steps:
    - name: Install Dependencies
      run: |
        sudo apt-get update
        sudo apt-get install -y \
          dbus \
          docbook-xml \
          docbook-xsl \
          libglib2.0-dev \
          meson \
          xsltproc \
          ${NULL+}
    - name: Check out xdg-dbus-proxy
      uses: actions/checkout@v1
      with:
        submodules: true
    - name: Create logs dir
      run: mkdir test-logs
    - name: configure
      run: |
        meson setup . _build
    - name: Build xdg-dbus-proxy
      run: ninja -C _build -v
    - name: Run tests
      run: meson test -C _build -v
    - name: Collect overall test logs on failure
      if: failure()
      run: mv _build/meson-logs/testlog.txt test-logs/ || true
    - name: Collect individual test logs on cancel
      if: failure() || cancelled()
      run: mv _build/meson-logs/testlog.txt test-logs/ || true
    - name: install
      run: |
        DESTDIR="$(pwd)/DESTDIR" meson install -C _build
        ( cd DESTDIR && find -ls )
    - name: distcheck
      run: |
        meson dist -C _build
    - name: Collect dist test logs on failure
      if: failure()
      run: mv _build/meson-private/dist-build/meson-logs/testlog.txt test-logs/disttestlog.txt || true
    - name: use as subproject
      run: |
        mkdir tests/use-as-subproject/subprojects
        tar -C tests/use-as-subproject/subprojects -xf _build/meson-dist/xdg-dbus-proxy-*.tar.xz
        mv tests/use-as-subproject/subprojects/xdg-dbus-proxy-* tests/use-as-subproject/subprojects/dbus-proxy
        ( cd tests/use-as-subproject && meson setup . _build )
        ninja -C tests/use-as-subproject/_build -v
        meson test -C tests/use-as-subproject/_build
        DESTDIR="$(pwd)/DESTDIR-as-subproject" meson install -C tests/use-as-subproject/_build
        ( cd DESTDIR-as-subproject && find -ls )
        test -x DESTDIR-as-subproject/usr/local/libexec/notflatpak-dbus-proxy
    - name: Upload test logs
      uses: actions/upload-artifact@v4
      if: failure() || cancelled()
      with:
        name: test logs
        path: test-logs

  clang:
    name: Build with clang and analyze
    runs-on: ubuntu-22.04
    strategy:
      fail-fast: false
      matrix:
        language:
        - cpp
        # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
        # Learn more:
        # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
    steps:
    # Initializes the CodeQL tools for scanning.
    - name: Initialize CodeQL
      uses: github/codeql-action/init@v3
      with:
        languages: ${{ matrix.language }}
        # If you wish to specify custom queries, you can do so here or in a config file.
        # By default, queries listed here will override any specified in a config file.
        # Prefix the list here with "+" to use these queries and those in the config file.
        # queries: ./path/to/local/query, your-org/your-repo/queries@main
    - name: Install Dependencies
      run: |
        sudo apt-get update
        sudo apt-get install -y \
          clang \
          dbus \
          docbook-xml \
          docbook-xsl \
          libglib2.0-dev \
          libtool \
          meson \
          xsltproc \
          ${NULL+}
    - name: Check out xdg-dbus-proxy
      uses: actions/checkout@v1
      with:
        submodules: true
    - name: Create logs dir
      run: mkdir test-logs
    - name: configure
      run: |
        meson setup . _build -Db_sanitize=address,undefined
      env:
        CC: clang
    - name: Build xdg-dbus-proxy
      run: ninja -C _build -v
    - name: Perform CodeQL Analysis
      uses: github/codeql-action/analyze@v3
    - name: Run tests
      run: meson test -C _build -v
    - name: Collect overall test logs on failure
      if: failure()
      run: mv _build/meson-logs/testlog.txt test-logs/ || true
    - name: Collect individual test logs on cancel
      if: failure() || cancelled()
      run: mv _build/meson-logs/testlog.txt test-logs/ || true
    - name: Upload test logs
      uses: actions/upload-artifact@v4
      if: failure() || cancelled()
      with:
        name: test logs
        path: test-logs

  valgrind:
    name: Run tests in valgrind
    needs: meson # Don't run expensive test if main check fails
    runs-on: ubuntu-22.04
    steps:
    - name: Install Dependencies
      run: |
        sudo apt-get update
        sudo apt-get install -y \
          clang \
          dbus \
          docbook-xml \
          docbook-xsl \
          libglib2.0-dev \
          libtool \
          meson \
          valgrind \
          xsltproc \
          ${NULL+}
    - name: Check out xdg-dbus-proxy
      uses: actions/checkout@v1
      with:
        submodules: true
    - name: Create logs dir
      run: mkdir test-logs
    - name: configure
      run: |
        meson setup . _build
      env:
        CFLAGS: >-
          -O2
          -Wp,-D_FORTIFY_SOURCE=2
    - name: Build xdg-dbus-proxy
      run: ninja -C _build -v
    - name: Run tests
      run: meson test -C _build -v
    - name: Collect overall test logs on failure
      if: failure()
      run: mv _build/meson-logs/testlog.txt test-logs/ || true
    - name: Collect individual test logs on cancel
      if: failure() || cancelled()
      run: mv _build/meson-logs/testlog.txt test-logs/ || true
    - name: Upload test logs
      uses: actions/upload-artifact@v4
      if: failure() || cancelled()
      with:
        name: test logs
        path: test-logs
