From eb9e0583f748c09454499f3e212c4bb895370729 Mon Sep 17 00:00:00 2001 From: Anthony Mirabella Date: Thu, 7 Jul 2022 13:38:43 -0400 Subject: [PATCH] Add workflow to automate bundling dependabot PRs (#2997) Signed-off-by: Anthony J Mirabella --- .github/workflows/create-dependabot-pr.yml | 18 ++++++ .github/workflows/scripts/dependabot-pr.sh | 65 ++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 .github/workflows/create-dependabot-pr.yml create mode 100755 .github/workflows/scripts/dependabot-pr.sh diff --git a/.github/workflows/create-dependabot-pr.yml b/.github/workflows/create-dependabot-pr.yml new file mode 100644 index 00000000000..96b81163127 --- /dev/null +++ b/.github/workflows/create-dependabot-pr.yml @@ -0,0 +1,18 @@ +name: dependabot-pr + +on: + workflow_dispatch: + +jobs: + create-pr: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Install zsh + run: sudo apt-get update; sudo apt-get install zsh + + - name: Run dependabot-pr.sh + run: ./.github/workflows/scripts/dependabot-pr.sh + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/scripts/dependabot-pr.sh b/.github/workflows/scripts/dependabot-pr.sh new file mode 100755 index 00000000000..e85532eb2aa --- /dev/null +++ b/.github/workflows/scripts/dependabot-pr.sh @@ -0,0 +1,65 @@ +#!/bin/zsh -ex + +# Copyright The OpenTelemetry Authors +# +# Licensed 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. + +git config user.name $GITHUB_ACTOR +git config user.email $GITHUB_ACTOR@users.noreply.github.com + +PR_NAME=dependabot-prs/`date +'%Y-%m-%dT%H%M%S'` +git checkout -b $PR_NAME + +IFS=$'\n' +requests=($(gh pr list --search "author:app/dependabot" --json number,title --template '{{range .}}{{tablerow .title}}{{end}}')) +message="" +dirs=(`find . -type f -name "go.mod" -exec dirname {} \; | sort | egrep '^./'`) + +declare -A mods + +for line in $requests; do + echo $line + if [[ $line != Bump* ]]; then + continue + fi + + module=$(echo $line | cut -f 2 -d " ") + if [[ $module == go.opentelemetry.io/otel* ]]; then + continue + fi + version=$(echo $line | cut -f 6 -d " ") + + mods[$module]=$version + message+=$line + message+=$'\n' +done + +for module version in ${(kv)mods}; do + topdir=`pwd` + for dir in $dirs; do + echo "checking $dir" + cd $dir && if grep -q "$module " go.mod; then go get "$module"@v"$version"; fi + cd $topdir + done +done + +make go-mod-tidy +make build + +git add go.sum go.mod +git add "**/go.sum" "**/go.mod" +git commit -m "dependabot updates `date` +$message" +git push origin $PR_NAME + +gh pr create --title "dependabot updates `date`" --body "$message" -l "Skip Changelog"