#!/bin/bash # Load environment variables GITHUB_TOKEN="${GITHUB_TOKEN:?❌ Error: GITHUB_TOKEN is not set}" REPO_LIST_FILE="repos.txt" # Name of the file containing the repo list # Ensure the file exists if [[ ! -f "$REPO_LIST_FILE" ]]; then echo "❌ Error: File '$REPO_LIST_FILE' not found!" exit 1 fi echo "🔍 Checking and updating repositories to private..." # Loop through each repository in the file while IFS= read -r REPO_FULL_NAME; do echo "🔄 Processing repository: $REPO_FULL_NAME..." # Get repository details REPO_INFO=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \ "https://api.github.com/repos/$REPO_FULL_NAME") IS_PRIVATE=$(echo "$REPO_INFO" | jq -r '.private') IS_FORK=$(echo "$REPO_INFO" | jq -r '.fork') HAS_ADMIN_ACCESS=$(echo "$REPO_INFO" | jq -r '.permissions.admin') IS_GITHUB_PAGES=$(echo "$REPO_INFO" | jq -r '.name' | grep -i '\.github\.io') # Skip if already private if [[ "$IS_PRIVATE" == "true" ]]; then echo "✅ Repository '$REPO_FULL_NAME' is already private. Skipping..." continue fi # Skip if the repo is a fork (GitHub doesn't allow making forked repos private) if [[ "$IS_FORK" == "true" ]]; then echo "⚠️ Skipping '$REPO_FULL_NAME' because it is a forked repository." continue fi # Skip if the repo is a GitHub Pages site if [[ -n "$IS_GITHUB_PAGES" ]]; then echo "⚠️ Skipping '$REPO_FULL_NAME' because it is a GitHub Pages site." continue fi # Skip if the user doesn't have admin access if [[ "$HAS_ADMIN_ACCESS" != "true" ]]; then echo "❌ Skipping '$REPO_FULL_NAME' because you do NOT have admin permissions." continue fi # Convert the repository to private RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X PATCH -H "Authorization: token $GITHUB_TOKEN" \ -H "Accept: application/vnd.github.v3+json" \ -d '{"private": true}' \ "https://api.github.com/repos/$REPO_FULL_NAME") if [[ "$RESPONSE" -eq 200 ]]; then echo "✅ Successfully converted '$REPO_FULL_NAME' to private." else echo "❌ Failed to make '$REPO_FULL_NAME' private. HTTP Status: $RESPONSE" fi done < "$REPO_LIST_FILE" echo "✅ All repositories processed."