{"id":29427551,"url":"https://github.com/boomit/github-config-manager","last_synced_at":"2026-04-12T22:48:55.363Z","repository":{"id":303417814,"uuid":"1015419936","full_name":"boomit/github-config-manager","owner":"boomit","description":"Manage GitHub repository secrets and variables across multiple repositories effortlessly with GitHub CLI automation.","archived":false,"fork":false,"pushed_at":"2025-07-07T14:53:13.000Z","size":25,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-07T14:55:59.515Z","etag":null,"topics":["automation","ci-cd","configuration-management","devops","github-actions","github-api","python","secrets-management"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/boomit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-07-07T13:26:12.000Z","updated_at":"2025-07-07T14:53:16.000Z","dependencies_parsed_at":"2025-07-07T14:56:03.620Z","dependency_job_id":"2d6adb7d-2d9b-4bc7-9094-96415058a58b","html_url":"https://github.com/boomit/github-config-manager","commit_stats":null,"previous_names":["boomit/github-config-manager"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/boomit/github-config-manager","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boomit%2Fgithub-config-manager","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boomit%2Fgithub-config-manager/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boomit%2Fgithub-config-manager/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boomit%2Fgithub-config-manager/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/boomit","download_url":"https://codeload.github.com/boomit/github-config-manager/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/boomit%2Fgithub-config-manager/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264995821,"owners_count":23695050,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","ci-cd","configuration-management","devops","github-actions","github-api","python","secrets-management"],"created_at":"2025-07-12T13:09:25.803Z","updated_at":"2026-04-12T22:48:50.317Z","avatar_url":"https://github.com/boomit.png","language":"Python","readme":"# 🚀 github-config-manager\n\n\u003e **License:** MIT  \n\u003e **Python Version:** 3.9+\n\n**`github-config-manager`**는 GitHub CLI(`gh`)를 활용하여 **여러 GitHub 리포지토리의 Secrets 및 Variables를 일괄적으로 관리**하고 자동화할 수 있는 강력한 도구입니다.  \n조직 내 리포지토리 설정을 일관되게 유지하거나 대량 업데이트가 필요한 경우에 특히 유용합니다.\n\n---\n\n## ✨ 주요 기능\n\n- 🔐 **Secrets 및 Variables 일괄 삭제**  \n  지정된 항목들을 여러 리포지토리에서 한 번에 삭제합니다.\n\n- 🛠️ **Secrets 및 Variables 일괄 설정/업데이트**  \n  여러 리포지토리에 동일한 값들을 빠르게 설정하거나 업데이트합니다.  \n  `--force` 옵션을 통해 덮어쓰기 여부를 제어할 수 있습니다.\n\n- 🔎 **리포지토리 자동 탐색**  \n  GitHub 조직 또는 사용자 계정의 모든 리포지토리를 자동으로 탐색하여 대상 리스트로 사용합니다.\n\n- 🎯 **특정 리포지토리만 지정 가능**  \n  파일(`--tr`)을 통해 특정 리포지토리 목록만 대상으로 작업할 수 있습니다.\n\n- ⚙️ **병렬 처리 지원**  \n  다수의 리포지토리를 여러 스레드로 병렬 처리하여 작업 속도를 대폭 향상시킵니다.\n\n- ✅ **작업 전 사용자 확인 요청**  \n  실제 작업 수행 전, 작업 대상과 내용을 사용자에게 명확히 보여주고 최종 확인을 받습니다.\n\n- 📈 **실시간 진행 상황 및 상세 로그 출력**  \n  각 리포지토리의 작업 결과를 확인 가능하며, 전체 진행 상황을 실시간으로 표시합니다.\n\n- 🛑 **작업 중단 기능 제공**  \n  실행 도중 언제든지 `'q' + Enter`를 입력하여 안전하게 작업을 중단할 수 있습니다.\n\n---\n\n## 🚀 시작하기\n\n### 📋 전제 조건\n\n- Python 3.9 이상\n- GitHub CLI (`gh`) 설치 및 로그인 필요  \n  👉 설치 가이드: https://cli.github.com/  \n  👉 로그인: `gh auth login`\n\n- 필수 GitHub 권한 (Scopes):**\n\n`github-config-manager`가 Secrets 및 Variables 작업을 성공적으로 수행하려면, `gh auth login` 시 발급받는 GitHub Personal Access Token (PAT)에 다음 권한(Scope)이 부여되어야 합니다.\n\n* `repo`: 리포지토리 Secrets 및 Variables를 읽고, 쓰고, 삭제하는 데 필요합니다.\n* `read:org`: (선택 사항) 특정 조직의 모든 리포지토리 목록을 가져올 때 필요합니다. 개인 리포토리만 관리한다면 필수는 아닙니다.\n\n이 권한들은 `gh auth login` 과정에서 GitHub CLI가 자동으로 제안하거나, 사용자가 명시적으로 선택할 수 있습니다.\n\n\n### 📦 설치\n\n```bash\ngit clone https://github.com/your-username/github-config-manager.git\ncd github-config-manager\npip install -r requirements.txt\n```\n\n\n\n---\n\n### 사용법\n\n'main.py' 스크립트를 사용하여 작업을 수행합니다. 다양한 명령줄 인자를 통해 Secret 및 Variable 작업 방식을 제어할 수 있습니다.\n```bash\npython main.py --help\n```\n\n예시:\n\n1. 특정 조직의 모든 리포지토리에서 Secret 삭제:\n   'my-org' 조직의 모든 리포지토리에서 'OLD_SECRET'이라는 Secret을 삭제합니다.\n\n   echo \"OLD_SECRET\" \u003e secrets_to_delete.txt\n   python main.py -o my-org -ds secrets_to_delete.txt\n\n2. 새로운 Secret 및 Variable 설정/업데이트 (기존 존재 시 건너뛰기):\n   'my-org' 조직의 모든 리포지토리에 'NEW_SECRET=value1' Secret과 'APP_VERSION=1.0' Variable을 설정합니다. 이미 존재하면 건너뜁니다.\n\n   echo \"NEW_SECRET=value1\" \u003e secrets.env\n   echo \"APP_VERSION=1.0\" \u003e variables.env\n   python main.py -o my-org -s secrets.env -v variables.env\n\n3. 특정 리포지토리 목록에 Secret 강제 업데이트:\n   'target_repos.txt'에 나열된 리포지토리에서 'API_KEY' Secret을 강제로 업데이트합니다.\n\n```bash\n   # target_repos.txt 예시:\n   # my-org/repo-a\n   # another-org/repo-b\n```\n\n```bash\n   echo \"API_KEY=new_super_secret\" \u003e api_key.env\n   python main.py -tr target_repos.txt -s api_key.env --force\n```\n\n4. 다중 워커(병렬 처리)를 사용하여 Secret 및 Variable 삭제/설정:\n   'my-org' 조직의 리포지토리를 5개의 워커(스레드)로 병렬 처리합니다.\n\n```bash\n   echo \"SECRET_TO_DELETE\" \u003e delete_secrets.txt\n   echo \"VAR_TO_SET=value\" \u003e set_vars.txt\n   python main.py -o my-org -ds delete_secrets.txt -v set_vars.txt -w 5\n```\n\n### 인자 (Arguments)\n\n단축 | 전체 인자 | 설명 | 필수\n:--- | :--------------- | :----------------------------------------------------------------------------- | :---\n-o | --organization | 작업할 GitHub 조직 또는 사용자 이름 (예: 'my-org' 또는 'my-username') | 예\n-s | --secrets-file | 설정할 Secret 이름과 값을 포함하는 파일 경로 (예: 'SECRET_NAME=VALUE') | 아니오\n-v | --values-file | 설정할 Variable 이름과 값을 포함하는 파일 경로 (예: 'VAR_NAME=VALUE') | 아니오\n-ds | --ds | 삭제할 Secret 이름 목록을 포함하는 파일 경로 (한 줄에 하나씩) | 아니오\n-dv | --dv | 삭제할 Variable 이름 목록을 포함하는 파일 경로 (한 줄에 하나씩) | 아니오\n-tr | --tr | 작업을 수행할 특정 리포지토리 목록을 포함하는 파일 경로 (한 줄에 하나씩, 'repo' 형식). 지정하지 않으면 organization내의 모든 repo에 적용 | 아니오\n-w | --workers | 동시에 처리할 최대 워커(스레드) 수 (기본값: '1' - 순차 처리) | 아니오\n-sl | --sleep | 각 리포지토리 처리 후 대기 시간(초) (순차 처리 시 적용, 기본값: '0') | 아니오\n-f | --force | Secret/Variable 설정 시 기존 값을 강제로 덮어쓸지 여부 (기본값: 'False') | 아니오\n\n---\n\n### 파일 포맷\n1. --secrets-file, --values-file 포맷\n```txt\n# secrets.env 파일 예시:\nMY_API_KEY=your_secret_or_value_here\nDATABASE_URL=postgres://user:pass@host:port/dbname\n```\n\n2. --ds, --dv 포맷\n```txt\n# secrets_to_delete.txt 파일 예시:\nMY_API_KEY\nDATABASE_URL\n```\n\n3. --tr\n```txt\nrepo-name1\nrepo-name2\nrepo-name3\n```\n\n\n## 기여하기\n\n기여는 언제나 환영입니다! 버그 보고, 기능 제안, 코드 개선 등 어떤 형태의 기여라도 좋습니다.\n\n1. 이 저장소를 Fork 합니다.\n2. 새로운 Feature Branch를 생성합니다 ('git checkout -b feature/AmazingFeature').\n3. 변경 사항을 Commit 합니다 ('git commit -m 'Add some AmazingFeature'').\n4. Branch를 Push 합니다 ('git push origin feature/AmazingFeature').\n5. Pull Request를 엽니다.\n\n---\n\n\n## ✨ 프로젝트가 유용하셨다면?\n\n이 프로젝트가 마음에 드셨거나 유용하게 사용하셨다면, GitHub에서 **Star**를 눌러주세요! 여러분의 관심은 프로젝트 발전에 큰 힘이 됩니다.\n\n---\n\n## 라이선스\n\n이 프로젝트는 MIT 라이선스에 따라 배포됩니다. 자세한 내용은 'LICENSE' 파일을 참조하세요.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboomit%2Fgithub-config-manager","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fboomit%2Fgithub-config-manager","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fboomit%2Fgithub-config-manager/lists"}