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