#
# Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

name: 'Build (windows)'

on:
  workflow_call:
    inputs:
      platform:
        required: true
        type: string
      extra-conf-options:
        required: false
        type: string
      make-target:
        required: false
        type: string
        default: 'product-bundles test-bundles'
      debug-levels:
        required: false
        type: string
        default: '[ "debug", "release" ]'
      msvc-toolset-version:
        required: true
        type: string
      msvc-toolset-architecture:
        required: true
        type: string
      configure-arguments:
        required: false
        type: string
      make-arguments:
        required: false
        type: string
      dry-run:
        required: false
        type: boolean
        default: false

env:
  # These are needed to make the MSYS2 bash work properly
  MSYS2_PATH_TYPE: minimal
  CHERE_INVOKING: 1

jobs:
  build-windows:
    name: build
    runs-on: windows-2025
    defaults:
      run:
        shell: bash

    strategy:
      fail-fast: false
      matrix:
        debug-level: ${{ fromJSON(inputs.debug-levels) }}
        include:
          - debug-level: debug
            flags: --with-debug-level=fastdebug
            suffix: -debug

    steps:
      - name: 'Checkout the JDK source'
        uses: actions/checkout@v4

      - name: 'Get MSYS2'
        uses: ./.github/actions/get-msys2

      - name: 'Get the BootJDK'
        id: bootjdk
        uses: ./.github/actions/get-bootjdk
        with:
          platform: windows-x64

      - name: 'Get JTReg'
        id: jtreg
        uses: ./.github/actions/get-jtreg

      - name: 'Get GTest'
        id: gtest
        uses: ./.github/actions/get-gtest

      - name: 'Check toolchain installed'
        id: toolchain-check
        run: |
          set +e
          '/c/Program Files/Microsoft Visual Studio/2022/Enterprise/vc/auxiliary/build/vcvars64.bat' -vcvars_ver=${{ inputs.msvc-toolset-version }}
          if [ $? -eq 0 ]; then
            echo "Toolchain is already installed"
            echo "toolchain-installed=true" >> $GITHUB_OUTPUT
          else
            echo "Toolchain is not yet installed"
            echo "toolchain-installed=false" >> $GITHUB_OUTPUT
          fi

      - name: 'Install toolchain and dependencies'
        run: |
          # Run Visual Studio Installer
          '/c/Program Files (x86)/Microsoft Visual Studio/Installer/vs_installer.exe' \
            modify --quiet --installPath 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise' \
            --add Microsoft.VisualStudio.Component.VC.${{ inputs.msvc-toolset-version }}.${{ inputs.msvc-toolset-architecture }}
        if: steps.toolchain-check.outputs.toolchain-installed != 'true'

      - name: 'Configure'
        run: >
          bash configure
          --with-conf-name=${{ inputs.platform }}
          ${{ matrix.flags }}
          --with-version-opt=${GITHUB_ACTOR}-${GITHUB_SHA}
          --with-boot-jdk=${{ steps.bootjdk.outputs.path }}
          --with-jtreg=${{ steps.jtreg.outputs.path }}
          --with-gtest=${{ steps.gtest.outputs.path }}
          --with-msvc-toolset-version=${{ inputs.msvc-toolset-version }}
          --with-jmod-compress=zip-1
          ${{ inputs.extra-conf-options }} ${{ inputs.configure-arguments }} || (
          echo "Dumping config.log:" &&
          cat config.log &&
          exit 1)
        env:
          # We need a minimal PATH on Windows
          # Set PATH to "", so just GITHUB_PATH is included
          PATH: ''
        shell: env /usr/bin/bash --login -eo pipefail {0}
        if: ${{ inputs.dry-run == false }}

      - name: 'Build'
        id: build
        uses: ./.github/actions/do-build
        with:
          make-target: '${{ inputs.make-target }} ${{ inputs.make-arguments }}'
          platform: ${{ inputs.platform }}
          debug-suffix: '${{ matrix.suffix }}'
        if: ${{ inputs.dry-run == false }}

      - name: 'Upload bundles'
        uses: ./.github/actions/upload-bundles
        with:
          platform: ${{ inputs.platform }}
          debug-suffix: '${{ matrix.suffix }}'
        if: ${{ inputs.dry-run == false }}
