name: Wasm

on:
  push:
    branches:
      - main
      - "release-*"
  pull_request:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}-${{ github.head_ref || github.actor_id }}
  cancel-in-progress: true

jobs:
  js_lint:
    name: "JS / Lint"
    runs-on: ubuntu-latest
    env:
      GOOS: js
      GOARCH: wasm
    steps:
      - name: Checkout repository
        uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
        with:
          persist-credentials: false
      - name: Install Go
        uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
        with:
          go-version-file: "go.mod"
      - name: Install dependencies
        run: sudo apt update && sudo apt install -y -q libgtk-4-dev libwebkitgtk-6.0-dev libsoup-3.0-dev libgl1-mesa-dev xorg-dev libpcap-dev
      - name: Install golangci-lint
        uses: golangci/golangci-lint-action@82606bf257cbaff209d206a39f5134f0cfbfd2ee #v9.2.1
        with:
          version: latest
          install-mode: binary
          skip-cache: true
          skip-save-cache: true
          cache-invalidation-interval: 0
          working-directory: ./client
        continue-on-error: true

  js_build:
    name: "JS / Build"
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
        with:
          persist-credentials: false
      - name: Install Go
        uses: actions/setup-go@924ae3a1cded613372ab5595356fb5720e22ba16 # v6.5.0
        with:
          go-version-file: "go.mod"
      - name: Build Wasm client
        run: GOOS=js GOARCH=wasm go build -o netbird.wasm ./client/wasm/cmd
        env:
          CGO_ENABLED: 0
      - name: Check Wasm build size
        run: |
          echo "Wasm build size:"
          ls -lh netbird.wasm

          SIZE=$(stat -c%s netbird.wasm)
          SIZE_MB=$((SIZE / 1024 / 1024))

          echo "Size: ${SIZE} bytes (${SIZE_MB} MB)"

          if [ ${SIZE} -gt 62914560 ]; then
            echo "Wasm binary size (${SIZE_MB}MB) exceeds 60MB limit!"
            exit 1
          fi
