From 65ebd6c7e20d4474073c3bffd1910949ad8f2cbe Mon Sep 17 00:00:00 2001 From: Sven Jansen Date: Tue, 28 Jul 2026 13:54:33 +0200 Subject: [PATCH] Add PrimeFlex issue migration workflow --- .github/workflows/migrate-issues.yml | 31 ++++++++++ scripts/migrate_issues.py | 87 ++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 .github/workflows/migrate-issues.yml create mode 100644 scripts/migrate_issues.py diff --git a/.github/workflows/migrate-issues.yml b/.github/workflows/migrate-issues.yml new file mode 100644 index 0000000..181e179 --- /dev/null +++ b/.github/workflows/migrate-issues.yml @@ -0,0 +1,31 @@ +name: Migrate Open Issues + +on: + workflow_dispatch: + +permissions: + contents: read + issues: write + +jobs: + migrate: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v7 + + - name: Setup Python + uses: actions/setup-python@v7 + with: + python-version: '3.12' + + - name: Install dependencies + run: pip install PyGithub + + - name: Run migration + env: + GITHUB_TOKEN: ${{ github.token }} + SOURCE_REPO: ${{ vars.SOURCE_REPO }} + DEST_REPO: ${{ github.repository }} + run: python scripts/migrate_issues.py diff --git a/scripts/migrate_issues.py b/scripts/migrate_issues.py new file mode 100644 index 0000000..b53a68c --- /dev/null +++ b/scripts/migrate_issues.py @@ -0,0 +1,87 @@ +import os +import time +from github import Github, Auth + +SOURCE_REPO = os.environ["SOURCE_REPO"] +DEST_REPO = os.environ["DEST_REPO"] +GITHUB_TOKEN = os.environ["GITHUB_TOKEN"] + +auth = Auth.Token(GITHUB_TOKEN) +github = Github(auth=auth) + +source = github.get_repo(SOURCE_REPO) +dest = github.get_repo(DEST_REPO) + + +def get_existing_migrations(): + migrated = set() + + print("Checking existing migrations...") + + for issue in dest.get_issues(state="all"): + if issue.body and "Original issue:" in issue.body: + original_url = issue.body.split("Original issue:", 1)[1].split()[0] + migrated.add(original_url) + + return migrated + + +existing = get_existing_migrations() +available_labels = {label.name for label in dest.get_labels()} + +print(f"Found {len(existing)} already migrated issues.") + +for issue in source.get_issues(state="open"): + + # Skip pull requests + if issue.pull_request: + continue + + original_url = issue.html_url + + if original_url in existing: + print(f"Skipping: {original_url}") + continue + + print(f"Migrating #{issue.number}: {issue.title}") + + new_issue = dest.create_issue( + title=issue.title, + body=f"""{issue.body or ""} + +--- + +Original issue: +{original_url} +""" + ) + + labels = [ + label.name + for label in issue.labels + if label.name in available_labels + ] + + if labels: + new_issue.set_labels(*labels) + + new_issue.create_comment( + f"""Hi @{issue.user.login}, + +This issue has been migrated from: + +{original_url} + +Please continue the discussion here. + +Thanks for your original report! +""" + ) + + print(f"Created #{new_issue.number}") + + existing.add(original_url) + + time.sleep(1) + +print("Migration complete.")