# syntax=docker/dockerfile:1
# escape=`
ARG MAJOR_VERSION=6.4
ARG ZBX_VERSION=${MAJOR_VERSION}
ARG BUILD_BASE_IMAGE=zabbix-build-base:ltsc2022-agent2-${ZBX_VERSION}

FROM ${BUILD_BASE_IMAGE} as builder

SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

ARG MAJOR_VERSION=6.4
ARG ZBX_VERSION=${MAJOR_VERSION}
ARG ZABBIX_VERSION_RC_NUM=2400
ARG ZBX_SOURCES=https://git.zabbix.com/scm/zbx/zabbix.git
ENV ZBX_SOURCES=$ZBX_SOURCES MAJOR_VERSION=$MAJOR_VERSION ZBX_VERSION=$ZBX_VERSION `
    MONGODB_PLUGIN_SOURCES=https://git.zabbix.com/scm/ap/mongodb.git MONGODB_PLUGIN_VERSION=master `
    POSTGRESQL_PLUGIN_SOURCES=https://git.zabbix.com/scm/ap/postgresql.git POSTGRESQL_PLUGIN_VERSION=master

LABEL org.opencontainers.image.title="Zabbix agent 2 build (Windows)" `
      org.opencontainers.image.authors="Alexey Pustovalov <alexey.pustovalov@zabbix.com>" `
      org.opencontainers.image.vendor="Zabbix LLC" `
      org.opencontainers.image.url="https://zabbix.com/" `
      org.opencontainers.image.description="Zabbix build for agent 2 images based on Windows" `
      org.opencontainers.image.licenses="GPL v2.0" `
      org.opencontainers.image.documentation="https://www.zabbix.com/documentation/${MAJOR_VERSION}/manual/installation/containers" `
      org.opencontainers.image.version="${ZBX_VERSION}" `
      org.opencontainers.image.source="${ZBX_SOURCES}"

RUN Set-Location -Path $env:SystemDrive\.; `
    `
    Import-Module ('{0}\Microsoft Visual Studio\2019\BuildTools\Common7\Tools\Microsoft.VisualStudio.DevShell.dll' -f ${env:ProgramFiles(x86)} ); `
    Enter-VsDevShell -VsInstallPath ('{0}\Microsoft Visual Studio\2019\BuildTools' -f ${env:ProgramFiles(x86)}) -DevCmdArguments """-arch=$env:BUILD_ARCH"""; `
    `
    Write-Host ('Checkout GIT {0} (master) repository ...' -f $env:ZBX_SOURCES); `
    git -c advice.detachedHead=false clone $env:ZBX_SOURCES --branch master --depth 1 --single-branch $env:SystemDrive\zabbix-$env:ZBX_VERSION; `
    `
    Write-Host ('Building Zabbix {0} version ...' -f $env:ZBX_VERSION); `
    Set-Location -Path $env:SystemDrive\zabbix-$env:ZBX_VERSION; `
    $ZbxRevision=(git rev-parse --short HEAD); `
    (Get-Content src\go\pkg\version\version.go).replace('{ZABBIX_REVISION}', $ZbxRevision) | Set-Content src\go\pkg\version\version.go; `
    Set-Location -Path $env:SystemDrive\zabbix-$env:ZBX_VERSION\build\mingw; `
    mingw32-make -s -j"""$env:NUMBER_OF_PROCESSORS""" `
#        CGO_LDFLAGS="""-lssl -lcrypto -lcrypt32 -L$env:SystemDrive\openssl_output\lib -L$env:SystemDrive\pcre2_output\lib""" `
        PCRE2=$env:SystemDrive\pcre2_output `
        OPENSSL=$env:SystemDrive\openssl_output `
        RFLAGS="""-DZABBIX_VERSION_RC_NUM=$env:ZABBIX_VERSION_RC_NUM"""; `
    `
    Write-Host 'Verifying build ("zabbix_agent2.exe -V") ...'; `
    & $env:SystemDrive\zabbix-$env:ZBX_VERSION\bin\win64\zabbix_agent2.exe -V; `
    dumpbin /dependents $env:SystemDrive\zabbix-$env:ZBX_VERSION\bin\win64\zabbix_agent2.exe; `
    `
    New-Item -ItemType directory -Path $env:SystemDrive\zabbix2 | Out-Null; `
    New-Item -ItemType directory -Path $env:SystemDrive\zabbix2\sbin | Out-Null; `
    New-Item -ItemType directory -Path $env:SystemDrive\zabbix2\conf | Out-Null; `
    `
    Copy-Item -Path $env:SystemDrive\zabbix-$env:ZBX_VERSION\bin\win64\zabbix_agent2.exe $env:SystemDrive\zabbix2\sbin; `
    Copy-Item -Path $env:SystemDrive\zabbix-$env:ZBX_VERSION\src\go\conf\zabbix_agent2.win.conf $env:SystemDrive\zabbix2\conf; `
    `
    Set-Location -Path $env:SystemDrive; `
    Write-Host ('Building Zabbix MongoDB plugin {0} version ...' -f $env:MONGODB_PLUGIN_VERSION); `
    git -c advice.detachedHead=false clone $env:MONGODB_PLUGIN_SOURCES --branch $env:MONGODB_PLUGIN_VERSION --depth 1 --single-branch $env:SystemDrive\mongodb_plugin; `
    Set-Location -Path $env:SystemDrive\mongodb_plugin; `
    mingw32-make; `
    mv $env:SystemDrive\mongodb_plugin\zabbix-agent2-plugin-mongodb $env:SystemDrive\mongodb_plugin\zabbix-agent2-plugin-mongodb.exe; `
    Write-Host 'Verifying build ("zabbix-agent2-plugin-mongodb.exe -V") ...'; `
    & $env:SystemDrive\mongodb_plugin\zabbix-agent2-plugin-mongodb.exe -V; `
    `
    Set-Location -Path $env:SystemDrive; `
    Write-Host ('Building Zabbix PostgreSQL plugin {0} version ...' -f $env:POSTGRESQL_PLUGIN_VERSION); `
    git -c advice.detachedHead=false clone $env:POSTGRESQL_PLUGIN_SOURCES --branch $env:POSTGRESQL_PLUGIN_VERSION --depth 1 --single-branch $env:SystemDrive\postgresql_plugin; `
    Set-Location -Path $env:SystemDrive\postgresql_plugin; `
    mingw32-make; `
    mv $env:SystemDrive\postgresql_plugin\zabbix-agent2-plugin-postgresql $env:SystemDrive\postgresql_plugin\zabbix-agent2-plugin-postgresql.exe; `
    Write-Host 'Verifying build ("zabbix-agent2-plugin-postgresql.exe -V") ...'; `
    & $env:SystemDrive\postgresql_plugin\zabbix-agent2-plugin-postgresql.exe -V; `
    Write-Host 'Zabbix binaries are compiled...'; `
    Remove-Item -Recurse -Force -Path $(go env GOCACHE);
