diff --git a/.editorconfig b/.editorconfig index a44e1c50759..3eca60b157c 100644 --- a/.editorconfig +++ b/.editorconfig @@ -23,3 +23,6 @@ ij_continuation_indent_size = 2 [*.md] trim_trailing_whitespace = false + +[*.sh] +indent_size = 2 diff --git a/.github/workflows/pr-request-report-labels.yml b/.github/workflows/pr-request-report-labels.yml index 9224225ba14..9adeefc4ffc 100644 --- a/.github/workflows/pr-request-report-labels.yml +++ b/.github/workflows/pr-request-report-labels.yml @@ -43,6 +43,18 @@ jobs: elif [ "$total_count" -gt 1 ]; then echo "valid=false" >> "$GITHUB_OUTPUT" echo "message=Only one report label is allowed: \`report: include\`, \`report: exclude\` OR \`report: highlight\`." >> "$GITHUB_OUTPUT" + fi + + feature_flag_count="$(jq '[.[] | select(.name == "feature flag")] | length' <<< "$labels_json")" + if [ "$feature_flag_count" -gt 0 ]; then + pr_body='${{ toJson(github.event.pull_request.body) }}' + pr_feature_flag_key="$(jq -nr --arg body "$pr_body" 'try ($body | gsub("\r"; "") | capture("(?m)^feature-flag:\\s*`(?[^`]+)`$").flag) catch ""')" + if [ -z "$pr_feature_flag_key" ]; then + echo "valid=false" >> "$GITHUB_OUTPUT" + echo "message=PR body must contain the feature flag key in the format: \`feature-flag: \\\`\\\`\`." >> "$GITHUB_OUTPUT" + else + echo "valid=true" >> "$GITHUB_OUTPUT" + fi else echo "valid=true" >> "$GITHUB_OUTPUT" fi diff --git a/.gitignore b/.gitignore index 467acf470d9..ac327fc782d 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,7 @@ captures/ adb-screenshots/ # Extracted eml files eml-files/ + +# Merged PRs report +merged-prs-*.md +merged-prs-*.csv diff --git a/scripts/merged-pr-report.sh b/scripts/merged-pr-report.sh index f0066e58a9a..675e8960c41 100755 --- a/scripts/merged-pr-report.sh +++ b/scripts/merged-pr-report.sh @@ -222,21 +222,21 @@ for BRANCH in "${BRANCHES[@]}"; do echo "## Branch: $BRANCH" >> "$MD_OUT" echo >> "$MD_OUT" - echo "| PR | Merged | Title | Report | Beta | Release |" >> "$MD_OUT" - echo "|---|---|---|---|---|---|" >> "$MD_OUT" + echo "| PR | Merged | Title | Report | Feature Flag | Beta | Release |" >> "$MD_OUT" + echo "|---|---|---|---|---|---|---|" >> "$MD_OUT" prs_json="$(gh pr list \ --repo "$OWNER/$REPO" \ --state merged \ --base "$BRANCH" \ --search "merged:$START..$END" \ - --json number,title,url,mergedAt,mergeCommit,labels,author \ + --json number,title,body,url,mergedAt,mergeCommit,labels,author \ --limit 1000)" sorted_prs_json="$(jq 'sort_by(.mergedAt)' <<< "$prs_json")" if [[ "$(jq 'length' <<< "$sorted_prs_json")" -eq 0 ]]; then - echo "| - | - | _No merged PRs in this range._ | - | - | - |" >> "$MD_OUT" + echo "| - | - | - | _No merged PRs in this range._ | - | - | - |" >> "$MD_OUT" echo >> "$MD_OUT" continue fi @@ -251,6 +251,9 @@ for BRANCH in "${BRANCHES[@]}"; do author="$(jq -r '.author.login // "ghost"' <<< "$pr")" labels_json="$(jq -c '.labels // []' <<< "$pr")" status="$(map_report_status "$labels_json")" + feature_flag="$(jq -r \ + 'try (.body // "" | gsub("\r"; "") | capture("(?m)^feature-flag:\\s*`(?[^`]+)`$").flag) catch "" // "-"' \ + <<< "$pr")" if [[ "$SKIP_EXCLUDED" == "true" && "$status" == "Exclude" ]]; then continue @@ -273,15 +276,16 @@ for BRANCH in "${BRANCHES[@]}"; do release_version="-" fi - echo "| [#$number]($url) | $merged_at | $title_md | $status | $beta_version | $release_version |" >> "$MD_OUT" + echo "| [#$number]($url) | $merged_at | $title_md | $status | $feature_flag | $beta_version | $release_version |" >> "$MD_OUT" - printf '%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n' \ + printf '%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n' \ "$(escape_csv "$BRANCH")" \ "$(escape_csv "$number")" \ "$(escape_csv "$merged_at")" \ "$(escape_csv "$author")" \ "$(escape_csv "$title")" \ "$(escape_csv "$status")" \ + "$(escape_csv "$feature_flag")" \ "$(escape_csv "$beta_version")" \ "$(escape_csv "$release_version")" \ "$(escape_csv "$sha")" \