semantic-conventions/.github/scripts/prepare-new-issue.sh

64 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Copyright The OpenTelemetry Authors
# SPDX-License-Identifier: Apache-2.0
#
#
# This script extracts the "Area" from the issue body and adds it as a label
# on newly created issues. The area from the issue body comes from
# the "Area" drop-down field in the ISSUE_TEMPLATE, which is auto-generated
# from the files inside model/registry.
# TODO: This script can be later used to also auto-assign the correct code-owner
# once that is implemented.
set -euo pipefail
OS=$(uname | tr '[:upper:]' '[:lower:]')
if [[ "${OS}" == "darwin" ]]; then
SED="gsed"
else
SED="sed"
fi
if [[ -z "${ISSUE:-}" || -z "${BODY:-}" || -z "${OPENER:-}" ]]; then
echo "Missing one of ISSUE, BODY, or OPENER, please ensure all are set."
exit 0
fi
LABELS="triage:needs-triage"
AREAS_SECTION_START=$( (echo "${BODY}" | grep -n '### Area(s)' | awk '{ print $1 }' | grep -oE '[0-9]+') || echo '-1' )
BODY_AREAS=""
if [[ "${AREAS_SECTION_START}" != '-1' ]]; then
BODY_AREAS=$(echo "${BODY}" | "${SED}" -n $((AREAS_SECTION_START+2))p)
fi
for AREA in ${BODY_AREAS}; do
# Areas are delimited by ', ' and the for loop separates on spaces, so remove the extra comma.
AREA=${AREA//,/}
if (( "${#AREA}" > 50 )); then
echo "'${AREA}' exceeds GitHub's 50-character limit on labels, skipping adding a label"
continue
fi
LABELS+=",${AREA}"
done
if [[ -v BODY_AREAS[@] ]]; then
echo "The issue was associated with areas:" "${!BODY_AREAS[@]}"
else
echo "No related areas were given"
fi
# Notes on this call:
# 1. Labels will be deduplicated by the GitHub CLI.
# 2. The call to edit the issue will fail if any of the
# labels doesn't exist. We can be reasonably sure that
# all labels will exist since they come from a known set.
echo "Adding the following labels: ${LABELS//,/ /}"
gh issue edit "${ISSUE}" --add-label "${LABELS}" || true