name: CI Pipeline
on: [push, pull_request]

jobs:
  build:
    runs-on: ${{ matrix.image }}
    strategy:
      fail-fast: false
      matrix:
        # Go 1.23 was the latest version as of 2024-08-31 but the action output a "warning":
        # Failed to restore: "/usr/bin/tar" failed with error: The process '/usr/bin/tar' failed with exit code 2
        # Go 1.22 didn't output the above "warning" so we're using this version.
        # Go 1.14 made -mod=vendor default.
        # Go 1.13 is the version set in go.mod.
        include:
          - { image: macos-14,     go: '1.22' }
          - { image: macos-14,     go: '1.21' }
          - { image: macos-14,     go: '1.20' }
          # Go 1.19 is the earliest version available for ARM64.
          - { image: macos-14,     go: '1.19' }
          # macos-12 runner has x86_64 support which is needed for old versions of Go
          - { image: macos-12,     go: '1.18' }
          - { image: macos-12,     go: '1.17' }
          - { image: macos-12,     go: '1.16' }
          - { image: macos-12,     go: '1.15' }
          - { image: macos-12,     go: '1.14' }
          - { image: macos-12,     go: '1.13' }
          - { image: ubuntu-22.04, go: '1.22', apt: libgtk-4-dev libwebkitgtk-6.0-dev }
          - { image: ubuntu-22.04, go: '1.22', apt: libgtk-3-dev libwebkit2gtk-4.1-dev }
          - { image: ubuntu-22.04, go: '1.22', apt: libgtk-3-dev libwebkit2gtk-4.0-dev }
          - { image: ubuntu-22.04, go: '1.21', apt: libgtk-3-dev libwebkit2gtk-4.1-dev }
          - { image: ubuntu-22.04, go: '1.20', apt: libgtk-3-dev libwebkit2gtk-4.1-dev }
          - { image: ubuntu-22.04, go: '1.19', apt: libgtk-3-dev libwebkit2gtk-4.1-dev }
          - { image: ubuntu-22.04, go: '1.18', apt: libgtk-3-dev libwebkit2gtk-4.1-dev }
          - { image: ubuntu-22.04, go: '1.17', apt: libgtk-3-dev libwebkit2gtk-4.1-dev }
          - { image: ubuntu-22.04, go: '1.16', apt: libgtk-3-dev libwebkit2gtk-4.1-dev }
          - { image: ubuntu-22.04, go: '1.15', apt: libgtk-3-dev libwebkit2gtk-4.1-dev }
          - { image: ubuntu-22.04, go: '1.14', apt: libgtk-3-dev libwebkit2gtk-4.1-dev }
          - { image: ubuntu-22.04, go: '1.13', apt: libgtk-3-dev libwebkit2gtk-4.1-dev }
          - { image: windows-2022, go: '1.22' }
          - { image: windows-2022, go: '1.21' }
          # Go 1.20 is the earliest version that is usable in this environment as of 2024-08-31.
          # Compilation fails with older versions:
          # [...]/bin/ld.exe: [...]\go-link-3209855222\000008.o: in function `x_cgo_thread_start':
          # \\_\_\runtime\cgo/gcc_util.c:18: undefined reference to `__imp___iob_func'
          - { image: windows-2022, go: '1.20' }
    name: Build (${{ matrix.image }}, go ${{ matrix.go }})
    steps:
      - uses: actions/checkout@v4
      - name: Install dependencies
        if: runner.os == 'Linux'
        run: sudo apt-get update && sudo apt-get install -y libwebkit2gtk-4.0-dev
      - uses: actions/setup-go@v5
        with:
          go-version: ${{ matrix.go }}
      - name: Build examples
        run: >
          go build
          ./examples/basic
          ./examples/bind
      - name: Run tests
        run: go test
