name: Build and test
on:
  push:
    branches:
      - master
  pull_request:
    paths:
      - '.github/workflows/test.yml'
      - '**Makefile'
      - '**.go'
      - '**.proto'
      - 'go.mod'
      - 'go.sum'
jobs:

  test-linux:
    name: Build all and test on ubuntu-linux
    runs-on: ubuntu-latest
    steps:

    - uses: actions/checkout@v5

    - uses: actions/setup-go@v6
      with:
        go-version: '1.25'
        check-latest: true

    - name: Build
      run: make all

    - name: Vet
      run: make vet

    - name: golangci-lint
      uses: golangci/golangci-lint-action@v9
      with:
        version: v2.5

    - name: Test
      run: make test

    - name: End 2 end
      run: make e2evv

    - name: Build test mobile
      run: make build-test-mobile

    - uses: actions/upload-artifact@v5
      with:
        name: e2e packet flow linux-latest
        path: e2e/mermaid/linux-latest
        if-no-files-found: warn

  test-linux-boringcrypto:
    name: Build and test on linux with boringcrypto
    runs-on: ubuntu-latest
    steps:

    - uses: actions/checkout@v5

    - uses: actions/setup-go@v6
      with:
        go-version: '1.25'
        check-latest: true

    - name: Build
      run: make bin-boringcrypto

    - name: Test
      run: make test-boringcrypto

    - name: End 2 end
      run: make e2e GOEXPERIMENT=boringcrypto CGO_ENABLED=1 TEST_ENV="TEST_LOGS=1" TEST_FLAGS="-v -ldflags -checklinkname=0"

  test-linux-pkcs11:
    name: Build and test on linux with pkcs11
    runs-on: ubuntu-latest
    steps:

    - uses: actions/checkout@v5

    - uses: actions/setup-go@v6
      with:
        go-version: '1.25'
        check-latest: true

    - name: Build
      run: make bin-pkcs11

    - name: Test
      run: make test-pkcs11

  test:
    name: Build and test on ${{ matrix.os }}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [windows-latest, macos-latest]
    steps:

    - uses: actions/checkout@v5

    - uses: actions/setup-go@v6
      with:
        go-version: '1.25'
        check-latest: true

    - name: Build nebula
      run: go build ./cmd/nebula

    - name: Build nebula-cert
      run: go build ./cmd/nebula-cert

    - name: Vet
      run: make vet

    - name: golangci-lint
      uses: golangci/golangci-lint-action@v9
      with:
        version: v2.5

    - name: Test
      run: make test

    - name: End 2 end
      run: make e2evv

    - uses: actions/upload-artifact@v5
      with:
        name: e2e packet flow ${{ matrix.os }}
        path: e2e/mermaid/${{ matrix.os }}
        if-no-files-found: warn
