Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
## ⚠️ WARNING: DO NOT OPEN THIS MANUALLY
This repository uses an automated PR flow. Manual PRs will be closed immediately.
Please push your branch to `PR/<unique-topic>` to let the automation create your PR.
59 changes: 59 additions & 0 deletions .github/workflows/auto-pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
name: Auto Create or Reopen PR

on:
push:
branches:
- 'PR/*'

jobs:
manage-pr:
runs-on: ubuntu-latest
permissions:
pull-requests: write
contents: read
steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Create or Reopen PR
uses: actions/github-script@v7
with:
script: |
const branchName = context.ref.replace('refs/heads/', '');
const targetBranch = 'public';

// 1. Check if a PR already exists for this branch (open or closed)
const { data: prs } = await github.rest.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
head: `${context.repo.owner}:${branchName}`,
state: 'all'
});

if (prs.length > 0) {
const latestPr = prs[0];

// 2. If the PR is closed and was NOT merged, reopen it
if (latestPr.state === 'closed' && !latestPr.merged_at) {
console.log(`Reopening existing PR #${latestPr.number}`);
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: latestPr.number,
state: 'open'
});
} else {
console.log('PR is already open or was previously merged. No action taken.');
}
} else {
// 3. If no PR exists, create a new one
console.log(`Creating new PR for ${branchName}`);
await github.rest.pulls.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: `Auto PR: ${branchName}`,
head: branchName,
base: targetBranch,
body: 'This Pull Request was automatically generated by GitHub Actions.'
});
}
37 changes: 37 additions & 0 deletions .github/workflows/block-manual-pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: Instant Close Manual PRs

on:
pull_request_target:
types: [opened, reopened]
branches:
- 'public'

jobs:
close-manual:
runs-on: ubuntu-latest
# Используем pull_request_target для доступа к secrets
if: github.actor != 'github-actions[bot]' && startsWith(github.head_ref, 'PR/')
steps:
- name: Close unauthorized PR
uses: actions/github-script@v7
with:
script: |
const prNumber = context.payload.pull_request.number;

// Добавляем комментарий
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: prNumber,
body: '🚫 **Manual PR detected and closed.**\n\nOnly automated PRs from GitHub Actions are allowed. Please push your changes and the PR will be created automatically.'
});

// Закрываем PR
await github.rest.pulls.update({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: prNumber,
state: 'closed'
});

console.log(`Closed manual PR #${prNumber}`);
Loading