From a5a1e7e861601a39ffd0135e03ac597caa4aed58 Mon Sep 17 00:00:00 2001 From: xwang2713 Date: Wed, 28 Feb 2024 02:53:10 -0500 Subject: [PATCH] Add ECLIDE build --- .github/workflows/build-ide.yml | 378 ++++++++++++++++++++++++++++++++ 1 file changed, 378 insertions(+) create mode 100644 .github/workflows/build-ide.yml diff --git a/.github/workflows/build-ide.yml b/.github/workflows/build-ide.yml new file mode 100644 index 0000000..1a32607 --- /dev/null +++ b/.github/workflows/build-ide.yml @@ -0,0 +1,378 @@ +name: Build ECLIDE + +env: + VCPKG_BINARY_SOURCES: "clear;nuget,GitHub,read" + VCPKG_NUGET_REPOSITORY: "https://github.com/hpcc-systems/vcpkg" + +on: + #workflow_dispatch + push: + +jobs: + preamble: + name: Publish Release + env: + COMMUNITY_REF: "3eb770915a09815ab4342d157a25ef306f2b1523" + ECLIDE_REF: "97207e7283550c3d6205333b8322498eddfddc8b" + GITHUB_ACCOUNT: ${{ github.repository_owner }} + runs-on: ubuntu-22.04 + permissions: + contents: write + outputs: + folder_platform: ${{ steps.vars.outputs.folder_platform }} + mount_platform: ${{ steps.vars.outputs.mount_platform }} + folder_build: ${{ steps.vars.outputs.folder_build }} + mount_build: ${{ steps.vars.outputs.mount_build }} + community_ref: ${{ steps.vars.outputs.community_ref }} + eclide_ref: ${{ steps.vars.outputs.eclide_ref }} + community_tag: ${{ steps.vars.outputs.community_tag }} + hpcc_version: ${{ steps.vars.outputs.hpcc_version }} + candidate_base_branch: ${{ steps.vars.outputs.candidate_base_branch }} + candidate_branch: ${{ steps.vars.outputs.candidate_branch }} + cmake_docker_config: ${{ steps.vars.outputs.cmake_docker_config }} + gpg_import: ${{ steps.vars.outputs.gpg_import }} + github_account: ${{ steps.vars.outputs.github_account }} + steps: + - name: Calculate vars + id: vars + run: | + github_account=${{ env.GITHUB_ACCOUNT }} + echo "github_account=$github_account" >> $GITHUB_OUTPUT + echo "folder_platform=${{ github.workspace }}/HPCC-Platform" >> $GITHUB_OUTPUT + echo 'mount_platform=source="${{ github.workspace }}/HPCC-Platform",target=/hpcc-dev/HPCC-Platform,type=bind,consistency=cached' >> $GITHUB_OUTPUT + echo "folder_build=${{ github.workspace }}/build" >> $GITHUB_OUTPUT + echo 'mount_build=source="${{ github.workspace }}/build",target=/hpcc-dev/build,type=bind,consistency=cached' >> $GITHUB_OUTPUT + community_ref=${{ env.COMMUNITY_REF }} + echo "community_ref=$community_ref" >> $GITHUB_OUTPUT + eclide_ref=${{ env.ECLIDE_REF }} + echo "eclide_ref=$eclide_ref" >> $GITHUB_OUTPUT + community_tag=$(echo $community_ref | cut -d'/' -f3) + echo "community_tag=$community_tag" >> $GITHUB_OUTPUT + echo "hpcc_version=$(echo $community_tag | sed 's/community_//' | sed 's/-[0-9]$//')" >> $GITHUB_OUTPUT + community_base_ref=${{ github.event.base_ref || github.ref }} + candidate_branch=$(echo $community_base_ref | cut -d'/' -f3) + echo "candidate_branch=$candidate_branch" >> $GITHUB_OUTPUT + echo "candidate_base_branch=$(echo $candidate_branch | awk -F'.' -v OFS='.' '{ $3="x"; print }')" >> $GITHUB_OUTPUT + echo "cmake_docker_config=-DCMAKE_BUILD_TYPE=RelWithDebInfo -DVCPKG_FILES_DIR=/hpcc-dev -DCPACK_THREADS=0 -DUSE_OPTIONAL=OFF -DSIGN_MODULES=${{ env.GITHUB_ACCOUNT == 'hpcc-systems' && 'ON' || 'OFF' }}" >> $GITHUB_OUTPUT + echo 'gpg_import=gpg --batch --import /hpcc-dev/build/private.key' >> $GITHUB_OUTPUT + + - name: Print vars + run: | + echo "${{ toJSON(steps.vars.outputs) }})" + + build-docker: + name: Build Docker + needs: preamble + runs-on: ubuntu-22.04 + strategy: + matrix: + include: + - os: ubuntu-22.04 + name: docs + documentation: true + fail-fast: false + + steps: + - name: Free additional disk space (remove Android SDK + Tools) + continue-on-error: true + run: | + df -h + sudo rm -rf ${ANDROID_HOME} + sudo rm -rf ${JAVA_HOME_8_X64} + sudo rm -rf ${JAVA_HOME_11_X64} + sudo rm -rf ${JAVA_HOME_17_X64} + sudo rm -rf ${JAVA_HOME_21_X64} + sudo rm -rf ${CHROMEWEBDRIVER} + sudo rm -rf ${EDGEWEBDRIVER} + sudo rm -rf ${GECKOWEBDRIVER} + sudo rm -rf ${SELENIUM_JAR_PATH} + + - name: Display disk space (post free) + run: | + df -h + + - name: Checkout HPCC-Platform + uses: actions/checkout@v4 + with: + repository: ${{ needs.preamble.outputs.github_account }}/HPCC-Platform + ref: ${{ needs.preamble.outputs.community_ref }} + submodules: recursive + path: ${{ needs.preamble.outputs.folder_platform }} + + - name: Calculate vars + id: vars + working-directory: ${{ needs.preamble.outputs.folder_platform }}/vcpkg + run: | + vcpkg_sha_short=$(git rev-parse --short=8 HEAD) + echo "vcpkg_sha_short=$vcpkg_sha_short" >> $GITHUB_OUTPUT + docker_build_label=hpccsystems/platform-build-${{ matrix.os }} + echo "docker_build_label=$docker_build_label" >> $GITHUB_OUTPUT + echo "docker_tag=$docker_build_label:$vcpkg_sha_short" >> $GITHUB_OUTPUT + echo "docker_tag_candidate_base=$docker_build_label:${{ needs.preamble.outputs.candidate_base_branch }}" >> $GITHUB_OUTPUT + + - name: Print vars + run: | + echo "${{ toJSON(needs.preamble.outputs) }})" + echo "${{ toJSON(steps.vars.outputs) }})" + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Create Build Image + uses: docker/build-push-action@v4 + with: + builder: ${{ steps.buildx.outputs.name }} + file: ${{ needs.preamble.outputs.folder_platform }}/dockerfiles/vcpkg/${{ matrix.os }}.dockerfile + context: ${{ needs.preamble.outputs.folder_platform }}/dockerfiles/vcpkg + push: ${{ needs.preamble.outputs.github_account == 'hpcc-systems' }} + load: ${{ needs.preamble.outputs.github_account != 'hpcc-systems' }} + build-args: | + VCPKG_REF=${{ steps.vars.outputs.vcpkg_sha_short }} + tags: | + ${{ steps.vars.outputs.docker_tag_candidate_base }} + cache-from: | + type=registry,ref=${{ steps.vars.outputs.docker_tag_candidate_base }} + type=registry,ref=${{ steps.vars.outputs.docker_tag }} + cache-to: type=inline + + # Communtiy Build + - name: CMake Packages (community) + if: ${{ !matrix.ln && !matrix.ee && !matrix.container && !matrix.documentation }} + run: | + mkdir -p ${{ needs.preamble.outputs.folder_build }} + #echo "${{ secrets.SIGNING_SECRET }}" > ${{ needs.preamble.outputs.folder_build }}/private.key + + - name: CMake documentation (community) + if: ${{ !matrix.ln && !matrix.ee && !matrix.container && matrix.documentation }} + run: | + mkdir -p {${{needs.preamble.outputs.folder_build }},EN_US,PT_BR} + sudo rm -f ${{ needs.preamble.outputs.folder_build }}/CMakeCache.txt + sudo rm -rf ${{ needs.preamble.outputs.folder_build }}/CMakeFiles + docker run --rm --mount ${{ needs.preamble.outputs.mount_platform }} --mount ${{ needs.preamble.outputs.mount_build }} ${{ steps.vars.outputs.docker_tag_candidate_base }} "\ + cmake -S /hpcc-dev/HPCC-Platform -B /hpcc-dev/build -DMAKE_DOCS_ONLY=ON -DUSE_NATIVE_LIBRARIES=ON -DDOCS_AUTO=ON -DDOC_LANGS=ALL && \ + cmake --build /hpcc-dev/build --parallel $(nproc) --target all" + docker run --rm --mount ${{ needs.preamble.outputs.mount_platform }} --mount ${{ needs.preamble.outputs.mount_build }} ${{ steps.vars.outputs.docker_tag_candidate_base }} "cd /hpcc-dev/build/Release/docs/EN_US && zip ALL_HPCC_DOCS_EN_US-${{ needs.preamble.outputs.community_tag }}.zip *.pdf" + docker run --rm --mount ${{ needs.preamble.outputs.mount_platform }} --mount ${{ needs.preamble.outputs.mount_build }} ${{ steps.vars.outputs.docker_tag_candidate_base }} "cd /hpcc-dev/build/Release/docs/PT_BR && zip ALL_HPCC_DOCS_PT_BR-${{ needs.preamble.outputs.community_tag }}.zip *.pdf" + + - name: Upload Artifacts for ECLIDE build + if: ${{ !matrix.ln && !matrix.container && matrix.documentation }} + uses: actions/upload-artifact@v4 + with: + name: html-help-documents + path: | + ${{ needs.preamble.outputs.folder_build }}/docs/EN_US/EclipseHelp/*.zip + ${{ needs.preamble.outputs.folder_build }}/docs/EN_US/HTMLHelp/*.zip + ${{ needs.preamble.outputs.folder_build }}/docs/PT_BR/HTMLHelp/*.zip + compression-level: 0 + + build-bare-metal: + name: Build Bare Metal + # if: github.repository == 'hpcc-systems/HPCC-Platform' + needs: preamble + strategy: + matrix: + include: + - os: "windows-2022" + mono: "" + sudo: "" + cmake_config_options: '-T host=x64 -A x64 -DUSE_OPTIONAL=OFF -DCLIENTTOOLS_ONLY=ON -DUSE_AZURE=OFF -DUSE_CASSANDRA=OFF -DUSE_JAVA=OFF -DUSE_OPENLDAP=OFF' + cmake_build_options: "--config Release --parallel $NUMBER_OF_PROCESSORS" + fail-fast: false + + runs-on: ${{ matrix.os }} + steps: + - name: Print vars + shell: "bash" + run: | + echo ${{ matrix.os }} + echo "${{ toJSON(needs.preamble.outputs) }})" + + - name: "Remove builtin vcpkg (old)" + working-directory: . + shell: "bash" + run: | + ${{ matrix.sudo }} rm -rf "$VCPKG_INSTALLATION_ROOT" + + - name: Checkout HPCC-Platform + uses: actions/checkout@v4 + with: + repository: ${{ needs.preamble.outputs.github_account }}/HPCC-Platform + ref: ${{ needs.preamble.outputs.community_ref }} + submodules: recursive + path: ./HPCC-Platform + + - name: "Create code signing" + if: ${{ contains(matrix.os,'windows') }} + shell: "pwsh" + run: | + mkdir -p ./sign + cd sign + $pfxPath = "hpcc_code_signing.pfx" + $encodedBytes = [System.Convert]::FromBase64String("${{ secrets.SIGNING_CERTIFICATE }}") + $currentDirectory = Get-Location + $certificatePath = Join-Path -Path $currentDirectory -ChildPath $pfxPath + [IO.File]::WriteAllBytes("$certificatePath", $encodedBytes) + CertUtil -p ${{ secrets.SIGNING_CERTIFICATE_PASSPHRASE }} hpcc_code_signing.pfx + + - name: "vcpkg Bootstrap" + shell: "bash" + run: | + ./HPCC-Platform/vcpkg/bootstrap-vcpkg.sh + + - name: "Setup NuGet credentials" + shell: "bash" + run: | + ${{ matrix.mono }} `./HPCC-Platform/vcpkg/vcpkg fetch nuget | tail -n 1` \ + sources add \ + -name "GitHub" \ + -source "https://nuget.pkg.github.com/hpcc-systems/index.json" \ + -storepasswordincleartext \ + -username "${{ github.repository_owner }}" \ + -password "${{ secrets.GITHUB_TOKEN }}" + + - name: CMake Packages + shell: "bash" + run: | + mkdir -p ./build + cmake -S ./HPCC-Platform -B ./build ${{ matrix.cmake_config_options }} + cmake --build ./build ${{ matrix.cmake_build_options }} --target package + + - name: Sign Windows Package + if: ${{ contains(matrix.os,'windows') }} + shell: "pwsh" + run: | + cd ./build + C:\"Program Files (x86)"\"Microsoft SDKs"\ClickOnce\SignTool\signtool.exe sign /debug /f ../sign/hpcc_code_signing.pfx /p ${{ secrets.SIGNING_CERTIFICATE_PASSPHRASE }} /t http://timestamp.digicert.com /fd SHA256 hpccsystems-clienttools*.exe + + - name: Upload Artifact for ECLIDE build + if: ${{ contains(matrix.os, 'windows') }} + uses: actions/upload-artifact@v4 + with: + name: Windows-Clienttools + path: ./build/hpccsystems-clienttools*.exe + compression-level: 0 + + - name: Upload error logs + if: ${{ failure() || cancelled() }} + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.os }}-logs + path: ./build/**/*.log + + build-bare-metal-eclide: + name: Build Bare Metal ECLIDE + needs: [ preamble, build-docker, build-bare-metal ] + runs-on: "windows-2022" + steps: + - name: Print vars + shell: "bash" + run: | + echo "${{ toJSON(needs.preamble.outputs) }})" + + - name: Checkout HPCC-Platform + uses: actions/checkout@v4 + with: + repository: ${{ needs.preamble.outputs.github_account }}/HPCC-Platform + ref: ${{ needs.preamble.outputs.community_ref }} + submodules: recursive + path: ./HPCC-Platform + + - name: Checkout ECLIDE + uses: actions/checkout@v4 + with: + repository: ${{ needs.preamble.outputs.github_account }}/ECLIDE + ref: ${{ needs.preamble.outputs.eclide_ref }} + submodules: recursive + path: ./ECLIDE + fetch-depth: 0 + + - name: "Install html-help-workshop" + shell: "bash" + run: | + choco install html-help-workshop + mkdir -p ./ECLIDE/docs }} + + - name: "Fetch html artifacts" + uses: actions/download-artifact@v4 + with: + name: html-help-documents + merge-multiple: true + + - name: "Fetch clienttools artifact" + uses: actions/download-artifact@v4 + with: + name: Windows-Clienttools + merge-multiple: true + + - name: "Create EN_US CHM file" + shell: "bash" + run: | + html_doc=$(find . -type f -name "html_help_EN_US-*") + mkdir html_help_EN_US + 7z x $html_doc -ohtml_help_EN_US + cd html_help_EN_US/html_help + # Chocolate install a package but it is not in PATH variable. Use path full of hhc.exe + # hhc.exe return non-zero. Appending "true" to work-around + C:/"Program Files (x86)"/"HTML Help Workshop"/hhc.exe htmlhelp.hhp || true + mv htmlhelp.chm ECLReference.chm + cp ECLReference.chm ../../ECLIDE/docs/ + + - name: "Create PT_BR CHM file" + shell: "bash" + run: | + html_doc=$(find . -type f -name "html_help_PT_BR-*") + mkdir html_help_PT_BR + 7z x $html_doc -ohtml_help_PT_BR + cd html_help_PT_BR/html_help + # Chocolate install a package but it is not in PATH variable. Use path full of hhc.exe + # hhc.exe return non-zero. Appending "true" to work-around + C:/"Program Files (x86)"/"HTML Help Workshop"/hhc.exe htmlhelp.hhp || true + mv htmlhelp.chm ECLReference_PT_BR.chm + cp ECLReference_PT_BR.chm ../../ECLIDE/docs/ + + - name: "Load code signing" + shell: "pwsh" + run: | + mkdir -p ./sign + cd sign + $pfxPath = "hpcc_code_signing.pfx" + $encodedBytes = [System.Convert]::FromBase64String("${{ secrets.SIGNING_CERTIFICATE }}") + $currentDirectory = Get-Location + $certificatePath = Join-Path -Path $currentDirectory -ChildPath $pfxPath + [IO.File]::WriteAllBytes("$certificatePath", $encodedBytes) + CertUtil -p ${{ secrets.SIGNING_CERTIFICATE_PASSPHRASE }} hpcc_code_signing.pfx + + - name: "Build ECLIDE" + run: | + cd ECLIDE + mkdir -p ./build + cd ./build + cmake -A Win32 -S ../ -B . + cmake --build . --config RelWithDebInfo --target package --parallel + + - name: Sign ECLIDE Package + shell: "pwsh" + run: | + cd ./ECLIDE/build + C:\"Program Files (x86)"\"Microsoft SDKs"\ClickOnce\SignTool\signtool.exe sign /debug /f ../../sign/hpcc_code_signing.pfx /p ${{ secrets.SIGNING_CERTIFICATE_PASSPHRASE}} /t http://timestamp.digicert.com /fd SHA256 hpccsystems-eclide*.exe + + - name: Upload Artifact for ECLIDE package + uses: actions/upload-artifact@v4 + with: + name: ECLIDE + path: ./ECLIDE/build/hpccsystems-eclide*.exe + compression-level: 0 + + - name: Upload error logs + if: ${{ failure() || cancelled() }} + uses: actions/upload-artifact@v3 + with: + name: windows-2022-logs + path: ./ECLIDE/build/**/*.log