# syntax=docker/dockerfile:experimental

# 全局參數
ARG	    backendName=<backendFolderName 開發POM裡的 artifactId, 如果POM裡有設定 name, 則此值為 name>
ARG	    packpath=/package

# ***** A.打包應用代碼和資源 *****
FROM maven:3.5.3-jdk-8 AS builder
ARG	    backendName
ARG	    packpath

ARG	    build=/build
ARG     developFolder=develop

# A.1.將源碼複製到建置用的文件夾下
# A.1.1.建立建置用的文件夾和之下的開發文件夾
RUN	    mkdir -p ${build}/${developFolder}
# A.1.2.將源碼開發文件夾 複製到 建置文件夾下
COPY    ${backendName}/${developFolder} ${build}/${developFolder}
# A.1.3.將源碼根POM pom.xml 複製到 建置文件夾下
COPY    ${backendName}/pom.xml ${build}/pom.xml

# A.2.編譯 建置文件夾下的開發根POM pom.xml 文件
RUN     --mount=type=cache,target=/root/.m2 mvn -f ${build}/pom.xml package

# A.3.將編譯後的文件複製到打包文件夾下
# A.3.1.建立出打包用的文件夾和之下的運行文件夾
RUN     mkdir -p ${packpath}/${backendName}
# A.3.2.將建置文件夾中編譯後輸出的運行文件夾 複製到 打包文件夾下
RUN     cp -r ${build}/${developFolder}/target/${backendName}/* ${packpath}/${backendName}

# A.4.複製應用配置和其他類庫到打包文件夾下
# A.4.1.應用配置文件夾 (建立打包文件夾下的對應文件夾 和 從源碼位置複製過去)
RUN	    mkdir -p ${packpath}/${backendName}/conf
COPY    ${backendName}/develop/conf/* ${packpath}/${backendName}/conf/
# A.4.2.應用多語言文件夾
RUN	    mkdir -p ${packpath}/${backendName}/lang
COPY    ${backendName}/develop/lang/* ${packpath}/${backendName}/lang/
# A.4.3.應用固定類庫文件夾(沒有放在 nexus 上的類庫)
RUN     mkdir -p ${packpath}/${backendName}/lib
COPY    ${backendName}/develop/lib/* ${packpath}/${backendName}/lib/

# ***** B.打包docker image *****
FROM registry.digiwincloud.com/dwsidecar/dwsidecar-1.0.0.0:1.0.0.33
ARG     backendName
ARG     packpath

# B.1.從建置區域中 把打包文件夾下的運行文件夾 複製到 image 中
COPY --from=builder ${packpath}/${backendName} /${backendName}

WORKDIR /${backendName}

RUN ls -r

RUN         chmod +x ./platform/bin/run.sh \
            && chmod +x ./platform/bin/stop.sh \
            && chmod +x ./platform/bin/docker/dockerEnv.sh \
            && chmod +x ./platform/bin/docker/dockerEnvReplace.sh \
            && chmod +x ./platform/bin/docker/dockerRun.sh
EXPOSE 22620
ENTRYPOINT ["/sampleapp1_backend/platform/bin/docker/dockerRun.sh"]