84 lines
2.7 KiB
Bash
Executable File
84 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
MANIFEST="$ROOT/docs/public-issues/public-issues-manifest.json"
|
|
|
|
if [[ "${CONFIRM_CREATE_GITHUB_ISSUES:-}" != "YES" ]]; then
|
|
printf 'create_public_issues=refused\n' >&2
|
|
printf 'Set CONFIRM_CREATE_GITHUB_ISSUES=YES to create GitHub issues.\n' >&2
|
|
printf 'Run scripts/prepare_public_issues.sh first and review the issue bodies.\n' >&2
|
|
exit 2
|
|
fi
|
|
|
|
if ! command -v gh >/dev/null 2>&1; then
|
|
printf 'create_public_issues=fail\n' >&2
|
|
printf 'gh CLI is not installed or not in PATH.\n' >&2
|
|
exit 2
|
|
fi
|
|
|
|
if ! command -v jq >/dev/null 2>&1; then
|
|
printf 'create_public_issues=fail\n' >&2
|
|
printf 'jq is required for manifest-driven issue creation.\n' >&2
|
|
exit 2
|
|
fi
|
|
|
|
if [[ ! -s "$MANIFEST" ]]; then
|
|
printf 'create_public_issues=fail\n' >&2
|
|
printf 'Missing manifest: docs/public-issues/public-issues-manifest.json\n' >&2
|
|
exit 2
|
|
fi
|
|
|
|
jq -e . "$MANIFEST" >/dev/null
|
|
jq -e '
|
|
(.status == "planned_issue_templates_ready" or .status == "public_issue_urls_recorded")
|
|
and .github_issue_tracker == "manual_or_gh_cli_creation_required"
|
|
and .github_role == "public_mirror_validation_only"
|
|
and .registry_release_evidence == "requires_russian_build_runner"
|
|
and (.issues | length == 12)
|
|
and all(.issues[];
|
|
(
|
|
.status == "ready_to_create"
|
|
and .github_issue_url == null
|
|
)
|
|
or (
|
|
.status == "created"
|
|
and (.github_issue_url | type == "string")
|
|
and (.github_issue_url | test("^https://github\\.com/igor04091968/AWatch-rus/issues/[0-9]+$"))
|
|
)
|
|
)
|
|
' "$MANIFEST" >/dev/null
|
|
|
|
gh auth status >/dev/null
|
|
|
|
existing_labels="$(mktemp)"
|
|
trap 'rm -f "$existing_labels"' EXIT
|
|
gh label list --limit 500 --json name --jq '.[].name' >"$existing_labels"
|
|
|
|
while IFS= read -r label; do
|
|
if ! grep -Fxq "$label" "$existing_labels"; then
|
|
gh label create "$label" --color "ededed" --description "AWatch-rus public governance label"
|
|
printf '%s\n' "$label" >>"$existing_labels"
|
|
fi
|
|
done < <(jq -r '.issues[] | select(.status == "ready_to_create") | .labels[]' "$MANIFEST" | sort -u)
|
|
|
|
created=0
|
|
|
|
while IFS=$'\t' read -r title labels source; do
|
|
body="$ROOT/$source"
|
|
if [[ ! -s "$body" ]]; then
|
|
printf 'create_public_issues=fail\n' >&2
|
|
printf 'Missing issue body: %s\n' "$source" >&2
|
|
exit 2
|
|
fi
|
|
url="$(gh issue create --title "$title" --label "$labels" --body-file "$body")"
|
|
printf 'created_issue=%s\n' "$url"
|
|
created=$((created + 1))
|
|
done < <(
|
|
jq -r '.issues[] | select(.status == "ready_to_create") | [.title, (.labels | join(",")), .source] | @tsv' "$MANIFEST"
|
|
)
|
|
|
|
printf 'create_public_issues=ok\n'
|
|
printf 'created=%d\n' "$created"
|
|
printf 'Update docs/public-issues/public-issues-manifest.json with the printed issue URLs.\n'
|