From 65fb7924dfe33170968f7fd825d865f0d5440736 Mon Sep 17 00:00:00 2001 From: Yakun Xu Date: Fri, 4 Dec 2020 04:44:34 +0800 Subject: [PATCH] [github-actions] add dependent PR support (#5899) --- .github/workflows/simulation-1.2.yml | 2 + .github/workflows/simulation.yml | 11 ++- .github/workflows/toranj.yml | 8 +- script/git-tool | 116 +++++++++++++++++++++++++++ script/test | 5 +- 5 files changed, 130 insertions(+), 12 deletions(-) create mode 100755 script/git-tool diff --git a/.github/workflows/simulation-1.2.yml b/.github/workflows/simulation-1.2.yml index 8a1283484..011702610 100644 --- a/.github/workflows/simulation-1.2.yml +++ b/.github/workflows/simulation-1.2.yml @@ -283,6 +283,8 @@ jobs: steps: - uses: actions/checkout@v2 - name: Build OTBR Docker + env: + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" run: | ./script/test build_otbr_docker - name: Bootstrap diff --git a/.github/workflows/simulation.yml b/.github/workflows/simulation.yml index 3cb71b229..3af171833 100644 --- a/.github/workflows/simulation.yml +++ b/.github/workflows/simulation.yml @@ -89,16 +89,13 @@ jobs: ./bootstrap - name: Run OTNS Tests env: - OTNS_COMMIT: "2d57478d9e748d09cad65cf5374942e9d96719ed" # openthread/ot-ns#112 + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" run: | export OT_DIR=$PWD mkdir -p /tmp/otns ( + ./script/git-tool clone --depth 1 https://github.com/openthread/ot-ns.git /tmp/otns cd /tmp/otns - git init - git remote add origin https://github.com/openthread/ot-ns.git - git fetch origin "${OTNS_COMMIT:-master}" --depth 1 - git reset --hard FETCH_HEAD ./script/test py-unittests py-examples ) - uses: actions/upload-artifact@v2 @@ -352,10 +349,12 @@ jobs: steps: - uses: actions/checkout@v2 - name: Bootstrap + env: + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" run: | sudo rm /etc/apt/sources.list.d/* sudo apt-get install -y avahi-daemon avahi-utils lcov - git clone https://github.com/openthread/ot-commissioner.git /tmp/ot-commissioner --depth 1 --branch master + script/git-tool clone https://github.com/openthread/ot-commissioner.git /tmp/ot-commissioner --depth 1 --branch master - name: Build run: | cd /tmp/ot-commissioner diff --git a/.github/workflows/toranj.yml b/.github/workflows/toranj.yml index 029657e07..0a95d0d4a 100644 --- a/.github/workflows/toranj.yml +++ b/.github/workflows/toranj.yml @@ -47,6 +47,8 @@ jobs: steps: - uses: actions/checkout@v2 - name: Bootstrap + env: + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" run: | sudo rm /etc/apt/sources.list.d/* && sudo apt-get update sudo apt-get --no-install-recommends install -y dbus libdbus-1-dev @@ -57,7 +59,7 @@ jobs: sudo apt-get --no-install-recommends install -y libboost-dev libboost-signals-dev sudo apt-get --no-install-recommends install -y lcov - git clone --depth=1 --branch=master https://github.com/openthread/wpantund.git + script/git-tool clone --depth=1 --branch=master https://github.com/openthread/wpantund.git cd wpantund ./bootstrap.sh ./configure @@ -82,6 +84,8 @@ jobs: steps: - uses: actions/checkout@v2 - name: Bootstrap + env: + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" run: | sudo rm /etc/apt/sources.list.d/* && sudo apt-get update sudo apt-get --no-install-recommends install -y dbus libdbus-1-dev @@ -92,7 +96,7 @@ jobs: sudo apt-get --no-install-recommends install -y libboost-dev libboost-signals-dev sudo apt-get --no-install-recommends install -y lcov - git clone --depth=1 --branch=master https://github.com/openthread/wpantund.git + script/git-tool clone --depth=1 --branch=master https://github.com/openthread/wpantund.git cd wpantund ./bootstrap.sh ./configure diff --git a/script/git-tool b/script/git-tool new file mode 100755 index 000000000..4cf8ba175 --- /dev/null +++ b/script/git-tool @@ -0,0 +1,116 @@ +#!/bin/bash +# +# Copyright (c) 2020, The OpenThread Authors. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. Neither the name of the copyright holder nor the +# names of its contributors may be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# Description: +# A tool to download projects with the ability to apply dependent PRs. +# + +set -euxo pipefail + +apply_dependencies() +{ + local project_name + + project_name=$(git remote get-url origin | grep -oE '[^/:]+/[^/:]+\.git$' | cut -d. -f1) + echo "project name: ${project_name}" + depends_on_pr="$(grep -E "^Depends-On: *${project_name}" | cut -d# -f2)" || { + echo "No dependency on ${project_name} found." + return 0 + } + echo "pr: #${depends_on_pr}" + git fetch --depth 1 origin "pull/${depends_on_pr}/head" + git checkout FETCH_HEAD +} + +get_pr_body() +{ + local pr + + [[ ${GITHUB_ACTIONS+x} && ${GITHUB_REF-} =~ ^refs/pull/[0-9]+/merge ]] || { + echo 'Not a pull request.' >&2 + return 0 + } + + pr="$(echo "${GITHUB_REF}" | cut -d/ -f3)" + + # do not print GITHUB_TOKEN + set +x + curl -H "authorization: Bearer ${GITHUB_TOKEN}" -H 'content-type: application/json' \ + "https://api.github.com/repos/${GITHUB_REPOSITORY}/pulls/${pr}" \ + | jq -r .body + set -x +} + +try_update() +{ + cd "$1" + + get_pr_body | apply_dependencies +} + +try_clone() +{ + local dest_dir + + dest_dir="$(git clone "$@" 2>&1 | tee | cut -d\' -f2)" + + cd "${dest_dir}" + get_pr_body | apply_dependencies +} + +print_help() +{ + echo "EXAMPLES: + $0 http://github.com/openthread/ot-br-posix.git + $0 http://github.com/openthread/ot-ns.git --depth 1 /tmp/ot-ns" +} + +main() +{ + if [[ $# == 0 ]]; then + print_help + return 0 + fi + + case $1 in + update) + shift + try_update "$@" + ;; + clone) + shift + try_clone "$@" + ;; + *) + print_help + return 1 + ;; + esac +} + +main "$@" diff --git a/script/test b/script/test index 1c9778d01..28f1f6fc0 100755 --- a/script/test +++ b/script/test @@ -230,17 +230,14 @@ do_build_otbr_docker() local otdir local otbrdir local otbr_options="-DOT_DUA=ON -DOT_MLR=ON -DOT_COVERAGE=ON -DOTBR_REST=OFF -DOTBR_WEB=OFF" - local otbr_commit=${OTBR_COMMIT:-5092e71b06b23f78f2288fcc5386bce3a8986bb1} # [backbone-router] remove MLR multicast routing using smcroute #604 local otbr_docker_image=${OTBR_DOCKER_IMAGE:-otbr-ot12-backbone-ci} otbrdir=$(mktemp -d -t otbr_XXXXXX) otdir=$(pwd) ( + ./script/git-tool clone https://github.com/openthread/ot-br-posix.git --depth 1 "${otbrdir}" cd "${otbrdir}" - git init - git fetch https://github.com/openthread/ot-br-posix.git "${otbr_commit}" --depth 1 - git reset --hard FETCH_HEAD rm -rf third_party/openthread/repo cp -r "${otdir}" third_party/openthread/repo rm -rf .git