name: Build and Publish Windows Worker

on:
  push:
    tags:
      - "v*"

env:
  CARGO_INCREMENTAL: 0
  SQLX_OFFLINE: true
  DISABLE_EMBEDDING: true
  RUST_LOG: info

jobs:
  cargo_build_windows:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v4

      - name: Read EE repo commit hash
        shell: pwsh
        run: |
          $ee_repo_ref = Get-Content .\backend\ee-repo-ref.txt
          echo "ee_repo_ref=$ee_repo_ref" | Out-File -FilePath $env:GITHUB_ENV -Append

      - name: Checkout windmill-ee-private repository
        uses: actions/checkout@v4
        with:
          repository: windmill-labs/windmill-ee-private
          path: ./windmill-ee-private
          ref: ${{ env.ee_repo_ref }}
          token: ${{ secrets.WINDMILL_EE_PRIVATE_ACCESS }}
          fetch-depth: 0

      - name: Setup Rust
        uses: actions-rs/toolchain@v1
        with:
          toolchain: 1.90.0
          override: true

      - name: Substitute EE code
        shell: bash
        run: |
          ./backend/substitute_ee_code.sh --copy --dir ./windmill-ee-private

      - name: Cargo build dynamic libraries windows
        timeout-minutes: 90
        run: |
          cd backend/windmill-duckdb-ffi-internal
          cargo build --release -p windmill_duckdb_ffi_internal

      - name: Cargo build windows
        timeout-minutes: 90
        run: |
          vcpkg.exe install openssl-windows:x64-windows
          vcpkg.exe install openssl:x64-windows-static
          vcpkg.exe integrate install
          $env:VCPKGRS_DYNAMIC=1
          $env:OPENSSL_DIR="${Env:VCPKG_INSTALLATION_ROOT}\installed\x64-windows-static"
          mkdir frontend/build && cd backend
          New-Item -Path . -Name "windmill-api/openapi-deref.yaml" -ItemType "File" -Force
          cargo build --release --features=enterprise,stripe,embedding,parquet,prometheus,openidconnect,cloud,jemalloc,tantivy,license,http_trigger,zip,oauth2,kafka,sqs_trigger,nats,postgres_trigger,mqtt_trigger,gcp_trigger,websocket,smtp,native_trigger,static_frontend,all_languages_windows,mcp,bedrock,private
      - name: Rename binary with corresponding architecture
        run: |
          Rename-Item -Path ".\backend\target\release\windmill.exe" -NewName "windmill-ee.exe"

      - name: Attach binary to release
        uses: softprops/action-gh-release@v2
        with:
          files: |
            ./backend/target/release/windmill-ee.exe

      - name: Attach dynamic libraries to release
        uses: softprops/action-gh-release@v2
        with:
          files: |
            ./backend/windmill-duckdb-ffi-internal/target/release/windmill_duckdb_ffi_internal.dll
