fix(charts): emit leading document separators in monitoring partials #1996
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Apply kind/area labels and milestone from PR body | |
| on: | |
| pull_request_target: | |
| types: [opened, edited, reopened] | |
| branches: | |
| - main | |
| # Serializes runs on the same PR so a remove then add label sequence always | |
| # completes as a unit. Otherwise, cancelling a mid-flight run can leave labels wiped. | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number }} | |
| cancel-in-progress: false | |
| jobs: | |
| kind-labels: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| pull-requests: write | |
| steps: | |
| - name: Sync kind labels | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| PR_BODY: ${{ github.event.pull_request.body }} | |
| PR_NUMBER: ${{ github.event.pull_request.number }} | |
| REPO: ${{ github.repository }} | |
| run: | | |
| # Escape percent sequences before echoing body derived text into a | |
| # ::warning:: so it cannot forge additional workflow commands. | |
| esc() { local s=$1; s=${s//'%'/%25}; s=${s//$'\r'/%0D}; s=${s//$'\n'/%0A}; printf '%s' "$s"; } | |
| # Extract /kind values from PR body. Absence of a directive is a no-op | |
| # to avoid wiping kind/* labels set by maintainers through the UI. | |
| kinds=$(printf '%s' "$PR_BODY" | tr -d '\r' | sed -n 's|^/kind[[:space:]][[:space:]]*||p' | \ | |
| sed 's|[[:space:]]*$||' | sed '/^$/d' | sort -u) | |
| [ -z "$kinds" ] && exit 0 | |
| # Validate every requested label before mutating. Removing first and | |
| # failing to add a mistyped label would leave the PR with no kind/*. | |
| existing=$(gh label list --repo "$REPO" --limit 200 --json name -q '.[].name') | |
| unknown=$(printf '%s\n' "$kinds" | while IFS= read -r kind; do | |
| printf '%s\n' "$existing" | grep -qxF "kind/$kind" || printf "kind/%s " "$kind" | |
| done) | |
| if [ -n "$unknown" ]; then | |
| echo "::warning::Unknown label(s) $(esc "${unknown% }"), skipping kind sync" | |
| exit 0 | |
| fi | |
| # Remove existing kind/* labels | |
| gh pr view "$PR_NUMBER" --repo "$REPO" --json labels \ | |
| -q '.labels[].name | select(startswith("kind/"))' | \ | |
| while IFS= read -r label; do | |
| gh pr edit "$PR_NUMBER" --repo "$REPO" --remove-label "$label" || echo "::warning::Failed to remove label '$(esc "$label")'" | |
| done | |
| printf '%s\n' "$kinds" | \ | |
| while IFS= read -r kind; do | |
| gh pr edit "$PR_NUMBER" --repo "$REPO" --add-label "kind/$kind" || \ | |
| echo "::warning::Label 'kind/$(esc "$kind")' not found in repository" | |
| done | |
| - name: Set area labels | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| PR_BODY: ${{ github.event.pull_request.body }} | |
| PR_NUMBER: ${{ github.event.pull_request.number }} | |
| REPO: ${{ github.repository }} | |
| run: | | |
| # Escape percent sequences before echoing body derived text into a | |
| # ::warning:: so it cannot forge additional workflow commands. | |
| esc() { local s=$1; s=${s//'%'/%25}; s=${s//$'\r'/%0D}; s=${s//$'\n'/%0A}; printf '%s' "$s"; } | |
| # Absence of a directive is a no-op. Area labels are also set by the | |
| # /area comment command and clearing here would wipe those. | |
| areas=$(printf '%s' "$PR_BODY" | tr -d '\r' | sed -n 's|^/area[[:space:]][[:space:]]*||p' | \ | |
| sed 's|[[:space:]]*$||' | sed '/^$/d' | sort -u) | |
| [ -z "$areas" ] && exit 0 | |
| existing=$(gh label list --repo "$REPO" --limit 200 --json name -q '.[].name') | |
| unknown=$(printf '%s\n' "$areas" | while IFS= read -r area; do | |
| printf '%s\n' "$existing" | grep -qxF "area/$area" || printf "area/%s " "$area" | |
| done) | |
| if [ -n "$unknown" ]; then | |
| echo "::warning::Unknown label(s) $(esc "${unknown% }"), skipping area sync" | |
| exit 0 | |
| fi | |
| # Remove existing area/* labels | |
| gh pr view "$PR_NUMBER" --repo "$REPO" --json labels \ | |
| -q '.labels[].name | select(startswith("area/"))' | \ | |
| while IFS= read -r label; do | |
| gh pr edit "$PR_NUMBER" --repo "$REPO" --remove-label "$label" || echo "::warning::Failed to remove label '$(esc "$label")'" | |
| done | |
| printf '%s\n' "$areas" | \ | |
| while IFS= read -r area; do | |
| gh pr edit "$PR_NUMBER" --repo "$REPO" --add-label "area/$area" || \ | |
| echo "::warning::Label 'area/$(esc "$area")' not found in repository" | |
| done | |
| - name: Set milestone | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| PR_BODY: ${{ github.event.pull_request.body }} | |
| PR_NUMBER: ${{ github.event.pull_request.number }} | |
| REPO: ${{ github.repository }} | |
| run: | | |
| # Escape percent sequences before echoing body derived text into a | |
| # ::warning:: so it cannot forge additional workflow commands. | |
| esc() { local s=$1; s=${s//'%'/%25}; s=${s//$'\r'/%0D}; s=${s//$'\n'/%0A}; printf '%s' "$s"; } | |
| # Use the last /milestone directive in the PR body | |
| milestone=$(printf '%s' "$PR_BODY" | tr -d '\r' | sed -n 's|^/milestone[[:space:]][[:space:]]*||p' | \ | |
| sed 's|[[:space:]]*$||' | sed '/^$/d' | tail -n 1) | |
| [ -z "$milestone" ] && exit 0 | |
| gh pr edit "$PR_NUMBER" --repo "$REPO" --milestone "$milestone" || \ | |
| echo "::warning::Milestone '$(esc "$milestone")' not found in repository" |