name: Flutter Windows History Build

on: [workflow_dispatch]

env:
  LLVM_VERSION: "10.0"
  FLUTTER_VERSION: "3.10.6"
  TAG_NAME: "tmp"
  FLUTTER_RUST_BRIDGE_VERSION: "1.75.3"
  # vcpkg version: 2022.05.10
  # for multiarch gcc compatibility
  VCPKG_COMMIT_ID: "501db0f17ef6df184fcdbfbe0f87cde2313b6ab1"
  VERSION: "1.2.4"

jobs:
  build-for-history-windows:
    name: ${{ matrix.job.date }}
    runs-on: ${{ matrix.job.os }}
    strategy:
      fail-fast: false
      matrix:
        job:
          - { target: x86_64-pc-windows-msvc, os: windows-2019, arch: x86_64, date: 2023-08-04, ref: 72c198a1e94cc1e0242fce88f92b3f3caedcd0c3 }
    steps:
      - name: Checkout source code
        uses: actions/checkout@v3
        with:
          ref: ${{ matrix.job.ref }}

      - name: Install LLVM and Clang
        uses: KyleMayes/install-llvm-action@v1
        with:
          version: ${{ env.LLVM_VERSION }}

      - name: Install flutter
        uses: subosito/flutter-action@v2
        with:
          channel: "stable"
          flutter-version: ${{ env.FLUTTER_VERSION }}
          cache: true

      - name: Install Rust toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          target: ${{ matrix.job.target }}
          override: true
          components: rustfmt
          profile: minimal # minimal component installation (ie, no documentation)

      - name: Install flutter rust bridge deps
        run: |
          cargo install flutter_rust_bridge_codegen --version ${{ env.FLUTTER_RUST_BRIDGE_VERSION }} --features "uuid"
          Push-Location flutter ; flutter pub get ; Pop-Location
          ~/.cargo/bin/flutter_rust_bridge_codegen --rust-input ./src/flutter_ffi.rs --dart-output ./flutter/lib/generated_bridge.dart

      - name: Install vcpkg dependencies
        run: |
          cd C:\
          git clone https://github.com/Kingtous/rustdesk_thirdpary_lib --depth=1 
          
      - name: Build rustdesk
        env:
          VCPKG_ROOT: C:\rustdesk_thirdpary_lib\vcpkg
        run: python3 .\build.py --portable --hwcodec --flutter --feature IddDriver

      - name: Build self-extracted executable
        shell: bash
        run: |
          pushd ./libs/portable
          python3 ./generate.py -f ../../flutter/build/windows/runner/Release/ -o . -e ../../flutter/build/windows/runner/Release/rustdesk.exe
          popd
          mkdir -p ./SignOutput
          mv ./target/release/rustdesk-portable-packer.exe ./SignOutput/rustdesk-${{ matrix.job.date }}-${{ matrix.job.target }}.exe
          
      - name: Publish Release
        uses: softprops/action-gh-release@v1
        with:
          prerelease: true
          tag_name: ${{ env.TAG_NAME }}
          files: |
            ./SignOutput/rustdesk-*.exe
