name: "Clang AST"

on:
  push:
    branches: master
    paths:
      - configure
      - 'auto/**'
      - 'src/**'
      - 'test/**'
      - '.github/workflows/clang-ast.yaml'
  pull_request:
    branches: master
    paths:
      - configure
      - 'auto/**'
      - 'src/**'
      - 'test/**'
      - '.github/workflows/clang-ast.yaml'

jobs:
  clang-ast:
    runs-on: ubuntu-latest

    container:
      image: debian:testing

    steps:
      - name: Install tools/deps
        run: |
          apt-get -y update
          apt-get -y install git wget curl llvm-dev libclang-dev clang make \
                             libssl-dev libpcre2-dev libperl-dev \
                             libphp-embed php-dev python3-dev libpython3-dev \
                             ruby-dev openjdk-21-jdk npm
          npm install -g node-gyp

      - uses: actions/checkout@v5

      - name: Checkout and build clang-ast
        run: |
          git clone https://github.com/nginx/clang-ast.git -b unit
          cd clang-ast
          make

      - name: Configure Unit
        run: ./configure --cc=clang --cc-opt="-Xclang -load -Xclang clang-ast/ngx-ast.so -Xclang -add-plugin -Xclang ngx-ast" --openssl --debug --tests

      - name: Build Unit
        run: make -j4 unitd

      - name: Build C tests
        run: make -j4 tests

      - name: Build Perl language module
        run: ./configure perl && make -j4 perl

      - name: Build PHP language module
        run: ./configure php && make -j4 php

      - name: Build Python language module
        run: ./configure python --config=python3-config && make -j4 python3

      - name: Build Ruby language module
        run: ./configure ruby && make -j4 ruby

      - name: Build Java support
        run: ./configure java && make -j4 java

      - name: Build Nodejs support
        run: ./configure nodejs && make node-local-install DESTDIR=node

      - name: Build wasm language module
        run: |
          wget -q -O- https://github.com/bytecodealliance/wasmtime/releases/download/v26.0.0/wasmtime-v26.0.0-x86_64-linux-c-api.tar.xz | tar -xJf -
          ./configure wasm --include-path=wasmtime-v26.0.0-x86_64-linux-c-api/include --lib-path=wasmtime-v26.0.0-x86_64-linux-c-api/lib --rpath && make wasm
