From e4b7f430ed5b517e7ef4cadad8494df05bb7fb51 Mon Sep 17 00:00:00 2001 From: Peter <81633644+TThanos3000@users.noreply.github.com> Date: Mon, 27 Jul 2026 14:56:35 +0300 Subject: [PATCH 1/3] Add roadmap synchronization workflow --- .github/workflows/sync-roadmap.yml | 72 ++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 .github/workflows/sync-roadmap.yml diff --git a/.github/workflows/sync-roadmap.yml b/.github/workflows/sync-roadmap.yml new file mode 100644 index 00000000..d328d758 --- /dev/null +++ b/.github/workflows/sync-roadmap.yml @@ -0,0 +1,72 @@ +name: Sync roadmap + +on: + push: + pull_request: + types: [opened, edited, synchronize, reopened, closed] + +permissions: + contents: read + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - name: Build payload + id: payload + env: + EVENT_NAME: ${{ github.event_name }} + EVENT_ACTION: ${{ github.event.action }} + REPOSITORY: ${{ github.repository }} + REF_NAME: ${{ github.ref_name }} + SHA: ${{ github.sha }} + ACTOR: ${{ github.actor }} + EVENT_PATH: ${{ github.event_path }} + SERVER_URL: ${{ github.server_url }} + TOKEN: ${{ secrets.ROADMAP_WEBHOOK_TOKEN }} + run: | + set -euo pipefail + + if [ "$EVENT_NAME" = "push" ]; then + jq -n \ + --arg token "$TOKEN" \ + --arg event_type "push" \ + --arg repository "$REPOSITORY" \ + --arg branch "$REF_NAME" \ + --arg sha "$SHA" \ + --arg commit_message "$(jq -r '.head_commit.message // ""' "$EVENT_PATH")" \ + --arg author "$(jq -r '.head_commit.author.name // env.ACTOR' "$EVENT_PATH")" \ + --arg timestamp "$(jq -r '.head_commit.timestamp // now | todateiso8601' "$EVENT_PATH")" \ + --arg commit_url "$SERVER_URL/$REPOSITORY/commit/$SHA" \ + '{token:$token,event_type:$event_type,repository:$repository,branch:$branch,sha:$sha,commit_message:$commit_message,author:$author,timestamp:$timestamp,commit_url:$commit_url}' \ + > payload.json + else + jq -n \ + --arg token "$TOKEN" \ + --arg event_type "pull_request" \ + --arg action "$(jq -r '.action // ""' "$EVENT_PATH")" \ + --arg repository "$REPOSITORY" \ + --arg pr_number "$(jq -r '.number // ""' "$EVENT_PATH")" \ + --arg pr_url "$(jq -r '.pull_request.html_url // ""' "$EVENT_PATH")" \ + --arg pr_title "$(jq -r '.pull_request.title // ""' "$EVENT_PATH")" \ + --arg pr_body "$(jq -r '.pull_request.body // ""' "$EVENT_PATH")" \ + --arg branch "$(jq -r '.pull_request.head.ref // ""' "$EVENT_PATH")" \ + --arg timestamp "$(jq -r '.pull_request.updated_at // now | todateiso8601' "$EVENT_PATH")" \ + --argjson merged "$(jq -r '.pull_request.merged // false' "$EVENT_PATH")" \ + '{token:$token,event_type:$event_type,action:$action,repository:$repository,pr_number:$pr_number,pr_url:$pr_url,pr_title:$pr_title,pr_body:$pr_body,branch:$branch,timestamp:$timestamp,merged:$merged}' \ + > payload.json + fi + + cat payload.json | jq 'del(.token)' + + - name: Send to roadmap + env: + ROADMAP_WEBHOOK_URL: ${{ secrets.ROADMAP_WEBHOOK_URL }} + run: | + set -euo pipefail + test -n "$ROADMAP_WEBHOOK_URL" + curl --fail-with-body --silent --show-error \ + --request POST \ + --header 'Content-Type: application/json' \ + --data @payload.json \ + "$ROADMAP_WEBHOOK_URL" From 747f4499b980d9997bd536096b17ea8b49145f35 Mon Sep 17 00:00:00 2001 From: Peter <81633644+TThanos3000@users.noreply.github.com> Date: Mon, 27 Jul 2026 14:56:53 +0300 Subject: [PATCH 2/3] Add roadmap fields to pull request template --- .github/pull_request_template.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 5d6bcb53..73e43cf5 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -2,6 +2,20 @@ Кратко опишите изменения и при необходимости приложите ссылку на задачу. +## Roadmap + +Укажите связанные доработки из Google-таблицы. + +```text +Roadmap-IDs: DEV-000 +Roadmap-Complete: DEV-000 +Roadmap-Partial: +``` + +- `Roadmap-IDs` — все связанные доработки. +- `Roadmap-Complete` — доработки, полностью закрываемые этим PR. +- `Roadmap-Partial` — доработки, реализованные только частично. + ## Проверка Укажите, как проверялись изменения. From d08c9a6a53c928c97113b8de43b8651513b2c60c Mon Sep 17 00:00:00 2001 From: Peter <81633644+TThanos3000@users.noreply.github.com> Date: Mon, 27 Jul 2026 15:01:58 +0300 Subject: [PATCH 3/3] Fix pull request event payload parsing --- .github/workflows/sync-roadmap.yml | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/.github/workflows/sync-roadmap.yml b/.github/workflows/sync-roadmap.yml index d328d758..b0591d36 100644 --- a/.github/workflows/sync-roadmap.yml +++ b/.github/workflows/sync-roadmap.yml @@ -21,12 +21,13 @@ jobs: REF_NAME: ${{ github.ref_name }} SHA: ${{ github.sha }} ACTOR: ${{ github.actor }} - EVENT_PATH: ${{ github.event_path }} SERVER_URL: ${{ github.server_url }} TOKEN: ${{ secrets.ROADMAP_WEBHOOK_TOKEN }} run: | set -euo pipefail + test -f "$GITHUB_EVENT_PATH" + if [ "$EVENT_NAME" = "push" ]; then jq -n \ --arg token "$TOKEN" \ @@ -34,9 +35,9 @@ jobs: --arg repository "$REPOSITORY" \ --arg branch "$REF_NAME" \ --arg sha "$SHA" \ - --arg commit_message "$(jq -r '.head_commit.message // ""' "$EVENT_PATH")" \ - --arg author "$(jq -r '.head_commit.author.name // env.ACTOR' "$EVENT_PATH")" \ - --arg timestamp "$(jq -r '.head_commit.timestamp // now | todateiso8601' "$EVENT_PATH")" \ + --arg commit_message "$(jq -r '.head_commit.message // ""' "$GITHUB_EVENT_PATH")" \ + --arg author "$(jq -r '.head_commit.author.name // env.ACTOR' "$GITHUB_EVENT_PATH")" \ + --arg timestamp "$(jq -r '.head_commit.timestamp // (now | todateiso8601)' "$GITHUB_EVENT_PATH")" \ --arg commit_url "$SERVER_URL/$REPOSITORY/commit/$SHA" \ '{token:$token,event_type:$event_type,repository:$repository,branch:$branch,sha:$sha,commit_message:$commit_message,author:$author,timestamp:$timestamp,commit_url:$commit_url}' \ > payload.json @@ -44,20 +45,20 @@ jobs: jq -n \ --arg token "$TOKEN" \ --arg event_type "pull_request" \ - --arg action "$(jq -r '.action // ""' "$EVENT_PATH")" \ + --arg action "$(jq -r '.action // ""' "$GITHUB_EVENT_PATH")" \ --arg repository "$REPOSITORY" \ - --arg pr_number "$(jq -r '.number // ""' "$EVENT_PATH")" \ - --arg pr_url "$(jq -r '.pull_request.html_url // ""' "$EVENT_PATH")" \ - --arg pr_title "$(jq -r '.pull_request.title // ""' "$EVENT_PATH")" \ - --arg pr_body "$(jq -r '.pull_request.body // ""' "$EVENT_PATH")" \ - --arg branch "$(jq -r '.pull_request.head.ref // ""' "$EVENT_PATH")" \ - --arg timestamp "$(jq -r '.pull_request.updated_at // now | todateiso8601' "$EVENT_PATH")" \ - --argjson merged "$(jq -r '.pull_request.merged // false' "$EVENT_PATH")" \ + --arg pr_number "$(jq -r '.number // ""' "$GITHUB_EVENT_PATH")" \ + --arg pr_url "$(jq -r '.pull_request.html_url // ""' "$GITHUB_EVENT_PATH")" \ + --arg pr_title "$(jq -r '.pull_request.title // ""' "$GITHUB_EVENT_PATH")" \ + --arg pr_body "$(jq -r '.pull_request.body // ""' "$GITHUB_EVENT_PATH")" \ + --arg branch "$(jq -r '.pull_request.head.ref // ""' "$GITHUB_EVENT_PATH")" \ + --arg timestamp "$(jq -r '.pull_request.updated_at // (now | todateiso8601)' "$GITHUB_EVENT_PATH")" \ + --argjson merged "$(jq -r '.pull_request.merged // false' "$GITHUB_EVENT_PATH")" \ '{token:$token,event_type:$event_type,action:$action,repository:$repository,pr_number:$pr_number,pr_url:$pr_url,pr_title:$pr_title,pr_body:$pr_body,branch:$branch,timestamp:$timestamp,merged:$merged}' \ > payload.json fi - cat payload.json | jq 'del(.token)' + jq 'del(.token)' payload.json - name: Send to roadmap env: