on: workflow_call: inputs: clone_dir: required: false type: string default: "Paddle" task: required: false type: string default: "cpu" is_merge: required: false type: string default: "false" outputs: docker_cpu_image: description: "Generate images for all CI usage" value: ${{ jobs.build-docker-images.outputs.docker_cpu_image }} docker_sot_image: description: "Generate images for all CI usage" value: ${{ jobs.build-docker-images.outputs.docker_sot_image }} docker_coverage_image: description: "Generate images for all CI usage" value: ${{ jobs.build-docker-images.outputs.docker_coverage_image }} docker_build_image: description: "Generate images for all CI usage" value: ${{ jobs.build-docker-images.outputs.docker_build_image }} docker_distribute_image: description: "Generate images for all CI usage" value: ${{ jobs.build-docker-images.outputs.docker_distribute_image }} docker_xpu_image: description: "Generate images for all CI usage" value: ${{ jobs.build-docker-images.outputs.docker_xpu_image }} docker_npu_image: description: "Generate images for all CI usage" value: ${{ jobs.build-docker-images.outputs.docker_npu_image }} docker_dcu_image: description: "Generate images for all CI usage" value: ${{ jobs.build-docker-images.outputs.docker_dcu_image }} docker_doc_image: description: "Generate images for all CI usage" value: ${{ jobs.build-docker-images.outputs.docker_doc_image }} jobs: build-docker-images: if: ${{ github.repository_owner == 'PaddlePaddle' }} name: Build docker runs-on: group: Docker-build outputs: docker_cpu_image: ${{ steps.build-docker-images.outputs.docker_cpu_image }} docker_sot_image: ${{ steps.build-docker-images.outputs.docker_sot_image }} docker_coverage_image: ${{ steps.build-docker-images.outputs.docker_coverage_image }} docker_build_image: ${{ steps.build-docker-images.outputs.docker_build_image }} docker_distribute_image: ${{ steps.build-docker-images.outputs.docker_distribute_image }} docker_xpu_image: ${{ steps.build-docker-images.outputs.docker_xpu_image }} docker_npu_image: ${{ steps.build-docker-images.outputs.docker_npu_image }} docker_dcu_image: ${{ steps.build-docker-images.outputs.docker_dcu_image }} docker_doc_image: ${{ steps.build-docker-images.outputs.docker_doc_image }} steps: - id: build-docker-images name: Build docker images env: PR_ID: ${{ github.event.pull_request.number || '0' }} COMMIT_ID: ${{ github.event.pull_request.head.sha || github.sha }} docker_cpu_file: Dockerfile.cuda9_cudnn7_gcc48_py35_centos6 docker_sot_file: Dockerfile.gcc133_ubuntu24_cpu_sot docker_coverage_file: Dockerfile.cuda117_cudnn8_gcc82_ubuntu18_coverage docker_build_file: Dockerfile.cuda11.2_cudnn8_gcc82_trt8 docker_distribute_file: Dockerfile.cuda123_cudnn9_gcc122_ubuntu20 docker_xpu_file: Dockerfile.develop.xre.ubuntu22 docker_npu_file: Dockerfile.develop.npu docker_dcu_file: Dockerfile.develop.dtk docker_doc_file: Dockerfile.doc dockerfile_script: https://raw.githubusercontent.com/PaddlePaddle/Paddle/refs/heads/develop/tools/dockerfile/ci_dockerfile.sh dockerfile_origin: https://raw.githubusercontent.com/PaddlePaddle/Paddle/refs/heads/develop/tools/dockerfile/Dockerfile.ubuntu20 run: | set -x rm -rf * .[^.]* if [ "${{ inputs.is_merge }}" == "true" ]; then mkdir -p tools/dockerfile && cd tools/dockerfile wget -q --tries=5 --no-proxy ${dockerfile_script} ${dockerfile_origin} --no-check-certificate else wget -q --tries=5 --no-proxy https://paddle-github-action.bj.bcebos.com/PR/${{ inputs.clone_dir }}/${PR_ID}/${COMMIT_ID}/Paddle.tar.gz --no-check-certificate tar xf Paddle.tar.gz --strip-components=1 rm Paddle.tar.gz cd tools/dockerfile fi bash ci_dockerfile.sh cd ../.. # docker build images if [ "${{ inputs.task }}" == "cpu" ]; then declare -A docker_files=(["docker_cpu"]="$docker_cpu_file" ["docker_distribute"]="$docker_distribute_file" ["docker_xpu"]="$docker_xpu_file" ["docker_npu"]="$docker_npu_file" ["docker_dcu"]="$docker_dcu_file" ["docker_sot"]="$docker_sot_file") elif [ "${{ inputs.task }}" == "build" ]; then declare -A docker_files=(["docker_build"]="$docker_build_file" ["docker_doc"]="$docker_doc_file") else declare -A docker_files=(["docker_coverage"]="$docker_coverage_file") fi for name in "${!docker_files[@]}" do md5_value=`md5sum tools/dockerfile/${docker_files[$name]} | awk '{print $1}'` if [ $name == "docker_dcu" ]; then md5_value="76937a563116f6008c8ca4cb4f592759" fi if [ $name == "docker_npu" ]; then md5_value="a3793bdeea5ae881a0c1eaf4d7c30c64" fi docker_image="ccr-2vdh3abv-pub.cnc.bj.baidubce.com/ci/paddle:${md5_value}" declare "${name}_image=${docker_image}" echo "${name}_image=${docker_image}" >> $GITHUB_OUTPUT set +e docker pull $docker_image pull_status=$? set -e if [ $pull_status -eq 0 ];then echo use docker cache else docker build -t $docker_image -f tools/dockerfile/${docker_files[$name]} . docker push $docker_image echo end docker build fi done # clean workspace cd ${{ github.workspace }} rm -rf * .[^.]*