meta-ast 0.4.0

Polyglot static-analysis engine: extract symbols and cross-language dependency graphs from 8 supported source languages, with optional MetaCall deployment manifest generation.
Documentation
name: Linux Test

on:
  workflow_dispatch:
  pull_request:
  push:
    tags:
      - 'v*.*.*'
    branches:
      - master
      - develop

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

jobs:
  linux-test:
    name: Linux GCC Test
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        build: [debug, release]
        image: ["debian:trixie-slim", "debian:bookworm-slim", "ubuntu:noble", "ubuntu:jammy"] # TODO: "alpine:3.17"

    steps:
      - name: Check out the repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install, build and run tests (build)
        run: ./docker-compose.sh build
        env:
          METACALL_BUILD_TYPE: ${{ matrix.build }}
          METACALL_BASE_IMAGE: ${{ matrix.image }}

      - name: Install, build and run tests (test)
        run: ./docker-compose.sh test
        env:
          METACALL_BUILD_TYPE: ${{ matrix.build }}
          METACALL_BASE_IMAGE: ${{ matrix.image }}

  linux-sanitizer-test:
    name: Linux GCC Sanitizer Test
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        image: ["debian:trixie-slim", "debian:bookworm-slim", "ubuntu:noble", "ubuntu:jammy"]
        sanitizer: [address-sanitizer, thread-sanitizer] # TODO: memory-sanitizer not supported by GCC

    env:
      SANITIZER_SKIP_SUMMARY: 1

    steps:
      - name: Check out the repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install, build and run thread sanitizer tests
        run: ./docker-compose.sh test-${{ matrix.sanitizer }}
        env:
          METACALL_BUILD_TYPE: debug
          METACALL_BASE_IMAGE: ${{ matrix.image }}

  linux-memcheck-test:
    name: Linux Valgrind Memcheck Test
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        image: ["debian:trixie-slim", "ubuntu:noble"]

    steps:
      - name: Check out the repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install, build and run Valgrind memcheck tests
        run: ./docker-compose.sh test-memcheck
        env:
          METACALL_BUILD_TYPE: debug
          METACALL_BASE_IMAGE: ${{ matrix.image }}

  linux-clang-test:
    name: Linux Clang Test
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        image: ["debian:trixie-slim", "ubuntu:noble"]
        clang: [clang, clang-address-sanitizer, clang-thread-sanitizer]

    env:
      SANITIZER_SKIP_SUMMARY: 1

    steps:
      - name: Check out the repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install, build and run Clang tests
        run: ./docker-compose.sh test-${{ matrix.clang }}
        env:
          METACALL_BUILD_TYPE: debug
          METACALL_BASE_IMAGE: ${{ matrix.image }}

  linux-memory-sanitizer-test:
    name: Linux Clang Memory Sanitizer Test
    runs-on: ubuntu-latest

    strategy:
      fail-fast: false
      matrix:
        image: ["debian:trixie-slim", "ubuntu:noble"]

    steps:
      - name: Check out the repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install, build and run Memory Sanitizer tests
        run: ./docker-compose.sh test-memory-sanitizer
        env:
          METACALL_BUILD_TYPE: debug
          METACALL_BASE_IMAGE: ${{ matrix.image }}

  linux-distributable:
    name: Linux Distributable Dispatch
    needs: [linux-test, linux-sanitizer-test] # TODO: linux-memcheck-test
    runs-on: ubuntu-latest
    if: startsWith(github.ref, 'refs/tags/') || github.ref == 'refs/heads/master'
    steps:
      - name: Linux Workflow Dispatch
        uses: convictional/trigger-workflow-and-wait@v1.6.1
        with:
          owner: metacall
          repo: distributable-linux
          github_token: ${{ secrets.G_PERSONAL_ACCESS_TOKEN }}
          workflow_file_name: ci.yml
          wait_workflow: true
          client_payload: '{"ref": "${{ github.head_ref || github.ref_name }}"}'
          ref: master