name: CI

on:
  push:
    branches: [ "**" ]
  pull_request:
    branches: [ "**" ]

jobs:
  miqt_genbindings:
    runs-on: ubuntu-24.04
    
    steps:
    - name: Checkout
      uses: actions/checkout@v4

    - name: Cache clang ASTs
      uses: actions/cache@v4
      with:
        path: cmd/genbindings/cachedir
        key: linux64-clang-cache
        
    - name: Rebuild binding source
      run: make
    
    - name: Assert no changes
      run: git update-index --really-refresh && git diff-index HEAD
    
  miqt_linux64_qt5:
    runs-on: ubuntu-24.04
    
    steps:
    - name: Checkout
      uses: actions/checkout@v4
    
    - name: Linux64 docker build
      run: docker build -t miqt/linux64:qt5 -f docker/linux64-go1.19-qt5.15-dynamic.Dockerfile .
    
    - name: Cache GOCACHE
      uses: actions/cache@v4
      with:
        path: ~/.cache/go-build
        key: linux64-gocache
    
    - name: Linux64 bindings compile and test
      run: docker run -v ~/.cache/go-build:/root/.cache/go-build -v $PWD:/src -w /src miqt/linux64:qt5 /bin/bash -c 'cd qt && go build && cd ../examples/marshalling && env QT_QPA_PLATFORM=offscreen go test -v'
    
  miqt_linux64_qt6_4:
    runs-on: ubuntu-24.04
    
    steps:
    - name: Checkout
      uses: actions/checkout@v4
    
    - name: Linux64 docker build
      run: docker build -t miqt/linux64:qt64 -f docker/linux64-go1.19-qt6.4-dynamic.Dockerfile .
    
    - name: Cache GOCACHE
      uses: actions/cache@v4
      with:
        path: ~/.cache/go-build
        key: linux64-qt64-gocache
    
    - name: Linux64 bindings compile
      run: docker run -v ~/.cache/go-build:/root/.cache/go-build -v $PWD:/src -w /src miqt/linux64:qt64 /bin/bash -c 'cd qt6 && go build'
    
  miqt_linux64_qt6_8:
    runs-on: ubuntu-24.04
    
    steps:
    - name: Checkout
      uses: actions/checkout@v4
    
    - name: Linux64 docker build
      run: docker build -t miqt/linux64:qt68 -f docker/linux64-go1.23-qt6.8-dynamic.Dockerfile .
    
    - name: Cache GOCACHE
      uses: actions/cache@v4
      with:
        path: ~/.cache/go-build
        key: linux64-qt68-gocache
    
    - name: Linux64 bindings compile
      run: docker run -v ~/.cache/go-build:/root/.cache/go-build -v $PWD:/src -w /src miqt/linux64:qt68 /bin/bash -c 'cd qt6 && go build'
    
  miqt_win32_qt5:
    runs-on: ubuntu-24.04
    
    steps:
    - name: Checkout
      uses: actions/checkout@v4
      
    - name: Cache GOCACHE
      uses: actions/cache@v4
      with:
        path: ~/.cache/go-build
        key: win32-gocache
    
    - name: Win32 docker build
      run: docker build -t miqt/win32:qt5 -f docker/win32-cross-go1.23-qt5.15-static.Dockerfile .
    
    - name: Win32 bindings compile
      run: docker run -v ~/.cache/go-build:/root/.cache/go-build -v $PWD:/src -w /src miqt/win32:qt5 /bin/bash -c 'cd qt && go build'

  miqt_win64_qt5:
    runs-on: ubuntu-24.04
    
    steps:
    - name: Checkout
      uses: actions/checkout@v4
      
    - name: Cache GOCACHE
      uses: actions/cache@v4
      with:
        path: ~/.cache/go-build
        key: win64-gocache
    
    - name: Win64 docker build
      run: docker build -t miqt/win64:qt5 -f docker/win64-cross-go1.23-qt5.15-static.Dockerfile .
    
    - name: Win64 bindings compile
      run: docker run -v ~/.cache/go-build:/root/.cache/go-build -v $PWD:/src -w /src miqt/win64:qt5 /bin/bash -c 'cd qt && go build'

  miqt_win64_qt68:
    runs-on: ubuntu-24.04
    
    steps:
    - name: Checkout
      uses: actions/checkout@v4
      
    - name: Cache GOCACHE
      uses: actions/cache@v4
      with:
        path: ~/.cache/go-build
        key: win64-gocache
    
    - name: Win64 docker build
      run: docker build -t miqt/win64:qt68 -f docker/win64-cross-go1.23-qt6.8-dynamic.Dockerfile .
    
    - name: Win64 bindings compile
      run: docker run -v ~/.cache/go-build:/root/.cache/go-build -v $PWD:/src -w /src miqt/win64:qt68 /bin/bash -c 'cd qt6 && go build'