From 6774504b7e73793504d1abee51106c2cde5142f9 Mon Sep 17 00:00:00 2001
From: "p.delpy@dkfz-heidelberg.de"
Date: Tue, 15 Oct 2024 07:59:34 +0200
Subject: [PATCH] feat: add auto archiving action
---
.github/scripts/rename_inactive_branches.py | 31 +++++++++++++++++++
.../workflows/rename-inactive-branches.yml | 27 ++++++++++++++++
2 files changed, 58 insertions(+)
create mode 100644 .github/scripts/rename_inactive_branches.py
create mode 100644 .github/workflows/rename-inactive-branches.yml
diff --git a/.github/scripts/rename_inactive_branches.py b/.github/scripts/rename_inactive_branches.py
new file mode 100644
index 00000000..1bc4bf85
--- /dev/null
+++ b/.github/scripts/rename_inactive_branches.py
@@ -0,0 +1,31 @@
+import requests
+from datetime import datetime, timedelta
+
+# Configuration
+GITHUB_TOKEN = os.getenv('GITHUB_TOKEN')
+REPO = 'owner/repo' # Replace with your repository
+HEADERS = {'Authorization': f'token {GITHUB_TOKEN}', 'Accept': 'application/vnd.github.v3+json'}
+API_URL = f'https://api.github.com/repos/{REPO}/branches'
+INACTIVE_DAYS = 365
+CUTOFF_DATE = datetime.now() - timedelta(days=INACTIVE_DAYS)
+
+# Fetch all branches
+def get_branches():
+ response = requests.get(API_URL, headers=HEADERS)
+ return response.json() if response.status_code == 200 else []
+
+# Rename inactive branches
+def rename_branch(old_name, new_name):
+ rename_url = f'https://api.github.com/repos/{REPO}/branches/{old_name}/rename'
+ response = requests.post(rename_url, json={'new_name': new_name}, headers=HEADERS)
+ print(f"Renamed branch {old_name} to {new_name}" if response.status_code == 201 else f"Failed to rename {old_name}: {response.status_code}")
+
+# Check if the branch is inactive
+def is_inactive(commit_url):
+ last_commit_date = requests.get(commit_url, headers=HEADERS).json()['commit']['committer']['date']
+ return datetime.strptime(last_commit_date, '%Y-%m-%dT%H:%M:%SZ') < CUTOFF_DATE
+
+# Rename inactive branches
+# for branch in get_branches():
+# if is_inactive(branch['commit']['url']):
+# rename_branch(branch['name'], f"archived/{branch['name']}")
diff --git a/.github/workflows/rename-inactive-branches.yml b/.github/workflows/rename-inactive-branches.yml
new file mode 100644
index 00000000..7463c1fb
--- /dev/null
+++ b/.github/workflows/rename-inactive-branches.yml
@@ -0,0 +1,27 @@
+name: Cleanup - Rename Inactive Branches
+
+on:
+ schedule:
+ - cron: '0 0 * * 0' # Runs every Sunday at midnight
+
+jobs:
+ cleanup-rename-branches:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout Repository
+ uses: actions/checkout@v2
+
+ - name: Set up Python
+ uses: actions/setup-python@v2
+ with:
+ python-version: '3.x'
+
+# - name: Install Libraries
+# run: pip install requests
+
+ - name: Run Script to Rename Inactive Branches
+ run: |
+ python .github/scripts/rename_inactive_branches.py
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
\ No newline at end of file