From b61bf6ef3d30b2adaa8bea472fb64fcd8df73dcf Mon Sep 17 00:00:00 2001 From: Adonis Ling Date: Fri, 16 Dec 2022 13:55:32 +0800 Subject: [PATCH] [chore] Add a build workflow for 1.2-lts (#18) Apache Doris made the branch branch-1.2-lts protected. As a result, all pull requests for this branch should be checked before merging it. Therefore, we should add a build workflow for this branch. --- .github/workflows/build-1.2.yml | 250 ++++++++++++++++++++++++++++++++ .github/workflows/build.yml | 4 +- 2 files changed, 252 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/build-1.2.yml diff --git a/.github/workflows/build-1.2.yml b/.github/workflows/build-1.2.yml new file mode 100644 index 0000000..203307f --- /dev/null +++ b/.github/workflows/build-1.2.yml @@ -0,0 +1,250 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: Build (1.2-lts) + +on: + schedule: + - cron: '*/30 * * * *' + +jobs: + prerelease: + name: Prerelease + runs-on: macos-latest + env: + GH_REPO: ${{ github.repository }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + permissions: + contents: write + outputs: + should_release: ${{ steps.check_diff.outputs.should_release }} + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + repository: 'apache/doris' + ref: 'branch-1.2-lts' + fetch-depth: 0 + + - name: Check Diff + id: check_diff + run: | + tag_name='automation-1.2-lts' + title="Apache Doris Third Party Prebuilt (${tag_name/automation-/})" + + if [[ -z "$(gh release list)" ]] || + ! gh release list | awk -F "\t" '{ print $3 }' | grep "${tag_name}" >/dev/null; then + gh release create -t "${title}" "${tag_name}" + fi + last_version="$(gh release view "${tag_name}" | sed -n -E 's/Doris Version: \*(.*)\*.*/\1/p')" + current_version="$(git log -1 --format='%H')" + + echo "Last Version: ${last_version}" + echo "Current Version: ${current_version}" + + should_release=false + if [[ -z "${last_version}" ]]; then + echo "The first release was detected." + should_release=true + elif [[ "${last_version}" != "${current_version}" ]]; then + cmd="git diff --name-only ${last_version} ${current_version} | grep -E '^thirdparty/'" + echo "Execute: ${cmd}" + content="$(eval "${cmd}")" || true + if [[ -n "${content}" ]]; then + echo -e "Detect changes:\n${content}" + should_release=true + fi + fi + + if "${should_release}"; then + echo -ne "Update Time: *$(date)*\nDoris Version: *${current_version}*\nStatus: *BUILDING*" >release_note.md + else + gh release view "${tag_name}" | sed -n '/--/,$p' | awk '{ if (NR > 1) print $0 }' | sed "{ + s/Update Time:.*/Update Time: *$(date)*/ + s/Doris Version:.*/Doris Version: *${current_version}*/ + }" >release_note.md + fi + gh release edit -F release_note.md "${tag_name}" + + echo "should_release=${should_release}" >> $GITHUB_OUTPUT + + - name: Download Source and Upload + if: steps.check_diff.outputs.should_release == 'true' + run: | + tag_name='automation-1.2-lts' + + cd thirdparty + sed '/# unpacking thirdpart archives/,$d' download-thirdparty.sh | bash - + + tar -zcvf doris-thirdparty-source.tgz src + + gh release upload --clobber "${tag_name}" doris-thirdparty-source.tgz + + build: + name: Build + needs: prerelease + if: needs.prerelease.outputs.should_release == 'true' + strategy: + matrix: + config: + - name: macOS + os: macos-12 + packages: >- + 'automake' + 'autoconf' + 'libtool' + 'pkg-config' + 'texinfo' + 'coreutils' + 'gnu-getopt' + 'python' + 'cmake' + 'ninja' + 'ccache' + 'bison' + 'byacc' + 'gettext' + 'wget' + 'pcre' + 'openjdk@11' + 'maven' + 'node' + + - name: Linux + os: ubuntu-22.04 + packages: >- + 'build-essential' + 'automake' + 'autoconf' + 'libtool-bin' + 'pkg-config' + 'cmake' + 'ninja-build' + 'ccache' + 'python-is-python3' + 'bison' + 'byacc' + 'flex' + 'binutils-dev' + 'libiberty-dev' + 'curl' + 'git' + 'zip' + 'unzip' + 'autopoint' + 'openjdk-11-jdk' + 'openjdk-11-jdk-headless' + 'maven' + + runs-on: ${{ matrix.config.os }} + env: + GH_REPO: ${{ github.repository }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + repository: 'apache/doris' + ref: 'branch-1.2-lts' + fetch-depth: 0 + + - name: Download + run: | + tag_name='automation-1.2-lts' + + cd thirdparty + curl -L "https://github.com/${{ github.repository }}/releases/download/${tag_name}/doris-thirdparty-source.tgz" \ + -o doris-thirdparty-source.tgz + tar -zxvf doris-thirdparty-source.tgz + + - name: Prepare for ${{ matrix.config.os }} + run: | + if [[ "${{ matrix.config.name }}" == 'macOS' ]]; then + brew install ${{ matrix.config.packages }} + else + export DEFAULT_DIR='/opt/doris' + export PATH="${DEFAULT_DIR}/ldb-toolchain/bin:${PATH}" + + sudo apt update + sudo apt upgrade --yes + sudo DEBIAN_FRONTEND=noninteractive apt install --yes ${{ matrix.config.packages }} + + mkdir -p "${DEFAULT_DIR}" + wget https://github.com/amosbird/ldb_toolchain_gen/releases/download/v0.12/ldb_toolchain_gen.sh \ + -q -O /tmp/ldb_toolchain_gen.sh + bash /tmp/ldb_toolchain_gen.sh "${DEFAULT_DIR}/ldb-toolchain" + fi + + - name: Build and Upload + run: | + tag_name='automation-1.2-lts' + + if [[ "${{ matrix.config.name }}" == 'Linux' ]]; then + export DEFAULT_DIR='/opt/doris' + export PATH="${DEFAULT_DIR}/ldb-toolchain/bin:${PATH}" + fi + + cd thirdparty + ./build-thirdparty.sh -j "$(nproc)" + + kernel="$(uname -s | awk '{print tolower($0)}')" + arch="$(uname -m)" + rm -rf "doris-thirdparty-prebuilt-${kernel}-${arch}.tar.xz" + tar -cf - installed | xz -z -T0 - >"doris-thirdparty-prebuilt-${kernel}-${arch}.tar.xz" + gh release upload --clobber "${tag_name}" "doris-thirdparty-prebuilt-${kernel}-${arch}.tar.xz" + + success: + name: Success + needs: [prerelease, build] + if: needs.prerelease.outputs.should_release == 'true' + runs-on: ubuntu-latest + env: + GH_REPO: ${{ github.repository }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + permissions: + contents: write + steps: + - name: Update Checksums + run: | + tag_name='automation-1.2-lts' + + gh release download "${tag_name}" + + content="$(gh release view "${tag_name}" | sed -n '/Update Time:/,/Doris Version:/p')" + echo -ne "${content}\nStatus: *SUCCESS*\n\n## Checksums\n\`\`\`\n$(sha256sum *)\n\`\`\`" >release_note.md + gh release edit -F release_note.md "${tag_name}" + + failure: + name: Failure + needs: [build] + if: failure() + runs-on: ubuntu-latest + env: + GH_REPO: ${{ github.repository }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + permissions: + contents: write + steps: + - name: Update Checksums + run: | + tag_name='automation-1.2-lts' + + gh release download "${tag_name}" + + content="$(gh release view "${tag_name}"" | sed -n '/Update Time:/,/Doris Version:/p')" + echo -ne "${content}\nStatus: *FAILURE*\n\n## Checksums\n\`\`\`\n$(sha256sum *)\n\`\`\`" >release_note.md + gh release edit -F release_note.md "${tag_name}" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ef05ede..73b852f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -43,7 +43,7 @@ jobs: id: check_diff run: | if [[ -z "$(gh release list)" ]] || - ! gh release list | awk -F "\t" '{ if ($3 == "automation") exit 0; else exit 1 }'; then + ! gh release list | awk -F "\t" '{ print $3 }' | grep 'automation' >/dev/null; then gh release create -t 'Apache Doris Third Party Prebuilt' automation fi last_version="$(gh release view automation | sed -n -E 's/Doris Version: \*(.*)\*.*/\1/p')" @@ -157,7 +157,7 @@ jobs: - name: Download run: | cd thirdparty - curl -L https://github.com/apache/doris-thirdparty/releases/download/automation/doris-thirdparty-source.tgz \ + curl -L https://github.com/${{ github.repository }}/releases/download/automation/doris-thirdparty-source.tgz \ -o doris-thirdparty-source.tgz tar -zxvf doris-thirdparty-source.tgz