TGViewer
DEV: Рубиновые тона DEV: Рубиновые тона @dev_in_ruby_colors · 3.28K subscribers
Post #1185 2.36K
Кстати, хотел рассказать об интересном подходе в GH actions. Можно создать цепочку из шагов, которые будут сами открывать PR (ну, к примеру обновлять какие-то файлы из другого источника) и сами делать merge. То есть всё работает само - просто мечта 😄

Предположим, в одном из шагов у нас уже загрузились файлы и создалась ветвь, теперь нужно открыть PR. Это можно легко сделать вот так:

    - name: Create or Update Pull Request
uses: actions/github-script@v7
with:
github-token: ${{ github.token }}
script: |
const path = require('path');
const createOrUpdatePR = require(path.join(process.env.GITHUB_ACTION_PATH, 'js/create-update-pr.js'));
await createOrUpdatePR({ github, context });


В файле js код для создания pr:

module.exports = async ({ github, context }) => {
const { repo } = context;

const { data: newPr } = await github.rest.pulls.create({
owner: repo.owner,
repo: repo.repo,
title: "some title",
head: branchName,
base: baseRef,
body: "",
});
}


baseRef - это переменная среды, которую можно в самом действии задать как ${{ github.ref_name }} (github - это встроенная штука)

А теперь этому pr можно назначить тег, чтобы потом сделать automerge:

      await github.rest.issues.addLabels({
owner: repo.owner,
repo: repo.repo,
issue_number: newPr.number,
labels: prLabels,
});


А вот следующим шагом мы запускаем программным способом другой workflow, которые сделает merge:

      - name: Trigger Automerge Workflow
uses: actions/github-script@v7
with:
github-token: ${{ secrets.PAT_TOKEN }}
script: |
await github.rest.actions.createWorkflowDispatch({
owner: context.repo.owner,
repo: context.repo.repo,
workflow_id: "automerge.yml",
ref: source_branch,
});


В качестве source_branch задаётся ветвь, которая создалась для pr.

Здесь также потребуется токен с правами на управление workflow, но его можно легко создать в профиле.

И затем в automerge.yml:


steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Automerge PRs
uses: pascalgn/automerge-action@v0.16.4
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
MERGE_LABELS: "automerge"
MERGE_METHOD: "squash"
MERGE_RETRIES: 6
MERGE_RETRY_SLEEP: 10000
MERGE_DELETE_BRANCH: "true"


Он просто найдёт pr с нужным тегом и сделает merge, если нет конфликтов и проверки прошли. Теперь для всего этого можно задать условие запуска (к примеру, по расписанию) и наблюдать за результатом 🤓
  • 🔥 10
  • 👍 3
  • ⚡ 2
More from @dev_in_ruby_colors
  1. Sep 28, 2026Github буйствует
  2. Sep 26, 2026В этом уроке по абстрактной алгебре говорим про области целостности, делители нуля, характ…
  3. Sep 22, 2026А тем временем сказ о ведьмаке, потерявшем память, уже доступен в виде аудиокниги. Целых 1…
  4. Sep 20, 2026В этом уроке по абстрактной алгебре продолжаем говорить о кольцах: в частности о subrings…
  5. Sep 17, 2026Сделал обзор актуальных библиотек JS для сбора данных, 10 штук бодрых решений на все случа…
  6. Sep 13, 2026В общем, мне тут особо было нечего делать и я подумал создать небольшой скрипт для решения…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →