ΠΠΎΠ΄ΠΏΠΈΡΠΊΠ° Π½Π° Π²ΡΠ΅ ΡΠ²ΠΎΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ: Π½ΠΎΡΠ½ΠΎΠΉ workflow Π²ΠΌΠ΅ΡΡΠΎ Π³Π°Π»ΠΎΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΠΎΠΉ Π½Π΅Ρ
Π Π½ΠΎΠ²ΠΎΠΌ issue ΠΈΠ»ΠΈ PR Π² ΡΠ²ΠΎΡΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ GitHub ΡΠΎΠΎΠ±ΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π²Ρ Π½Π° ΡΡΠΎΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½Ρ (watch). Π‘Π΅Π³ΠΎΠ΄Π½Ρ Π²ΡΡΡΠ½ΠΈΠ»ΠΎΡΡ, ΡΡΠΎ Ρ ΠΌΠ΅Π½Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ Π½Π΅Ρ Π½Π° Π΄ΠΎΠ±ΡΡΡ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π². Π‘Π°ΠΌΡΠΉ ΡΠ²Π΅ΠΆΠΈΠΉ, juev/brook, ΡΠΎΠ·Π΄Π°Π½ Π² 13:34, ΠΈ Π½Π° Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ API ΠΎΡΠ²Π΅ΡΠΈΠ» 404. ΠΠ½Π°ΡΠΈΡ, ΠΊΡΠΎ-ΡΠΎ ΠΌΠΎΠ³ ΠΎΡΠΊΡΡΡΡ ΡΠ°ΠΌ issue, Π° Ρ Π±Ρ ΡΠ·Π½Π°Π» ΠΎΠ± ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎ.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ°
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ GitHub ΠΎΠ±Π΅ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ° ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΠΌΠ°: Β«By default, you also automatically watch all repositories that you create and are owned by your personal accountΒ», ΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ β Β«You can also choose to automatically watch all repositories that you have push access to, except forksΒ»1. Π’Π°ΠΌ ΠΆΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ ΡΡΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ Π² ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡΡ . ΠΠ° ΡΡΡΠ°Π½ΠΈΡΠ΅ Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΡΠ°ΠΊΠΎΠΉ Π³Π°Π»ΠΎΡΠΊΠΈ Ρ Π½Π΅ Π½Π°ΡΡΠ», Π° Π² ΡΡΠ°ΡΡΠ΅ ΠΎ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΠΏΡΠΎ Π°Π²ΡΠΎΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ Π½Π΅Ρ Π½ΠΈ ΡΠ»ΠΎΠ²Π°2.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΠΎ API ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠ΄ΠΈΠ»Π°, ΡΡΠΎ Π°Π²ΡΠΎΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ° Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ. ΠΠ· ΠΏΡΡΠΈ ΡΠ°ΠΌΡΡ
Π½ΠΎΠ²ΡΡ
ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π² ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ Π½Π΅ Π±ΡΠ»ΠΎ Ρ brook (ΡΠΎΠ·Π΄Π°Π½ ΡΠ΅Π³ΠΎΠ΄Π½Ρ) ΠΈ Ρ claude (ΡΠ΅Π²ΡΠ°Π»Ρ). Π£ memcue ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ° Π±ΡΠ»Π°, Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΡΠ΅ΡΠ΅Π· 44 ΠΌΠΈΠ½ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Ρ ΠΏΠΎΡΡΠ°Π²ΠΈΠ» Π΅Ρ ΡΡΠΊΠ°ΠΌΠΈ.
ΠΠ°ΡΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΡΠΎΠΆΠ΅ Π½Π΅Ρ. ΠΠ° ΡΡΡΠ°Π½ΠΈΡΠ΅ https://github.com/watching ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ°ΡΡΠΎΠ²ΠΎ ΠΎΡΠΏΠΈΡΠ°ΡΡΡΡ.
ΠΠ°ΠΊΠΈΠ΅ Π΅ΡΡΡ Π²Π°ΡΠΈΠ°Π½ΡΡ
Π ΡΠΊΠ°ΠΌΠΈ. ΠΡΠΊΡΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΈ Π½Π°ΠΆΠ°ΡΡ Watch β All Activity. Π£ ΠΌΠ΅Π½Ρ 89 ΡΠ²ΠΎΠΈΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π² Π±Π΅Π· ΡΠΎΡΠΊΠΎΠ² ΠΈ Π°ΡΡ ΠΈΠ²Π½ΡΡ , ΠΈ ΠΏΡΠΎ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π½ΠΎΠ²ΡΠΉ ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΏΠΎΠΌΠ½ΠΈΡΡ. ΠΡΠΎ ΡΠΎΠ²Π½ΠΎ ΡΠΎ, ΡΡΠΎ ΡΠΆΠ΅ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π»ΠΎ.
Π Π°Π·ΠΎΠ²ΡΠΉ ΡΠΊΡΠΈΠΏΡ. Π£ REST API Π΅ΡΡΡ PUT /repos/{owner}/{repo}/subscription3, ΠΈ gh ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠΉΡΠΈ ΠΈΠΌ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ ΡΠΏΠΈΡΠΊΡ:
gh repo list --limit 1000 --json nameWithOwner -q '.[].nameWithOwner' \
| xargs -I{} gh api -X PUT repos/{}/subscription -F subscribed=true --silent
subscribed=true ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΡΠΎΠ²Π½Ρ Β«All activityΒ». Π£ΡΠΎΠ²Π΅Π½Ρ Custom Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΌΠΈ ΡΠ»Π°ΠΆΠΊΠ°ΠΌΠΈ Π΄Π»Ρ issues, PR ΠΈ ΡΠ΅Π»ΠΈΠ·ΠΎΠ² ΡΠ΅ΡΠ΅Π· ΡΡΠΎΡ Π²ΡΠ·ΠΎΠ² Π½Π΅ Π²ΡΡΡΠ°Π²ΠΈΡΡ. Π‘ΠΊΡΠΈΠΏΡ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ, Π½ΠΎ Π½Π΅ Π½ΠΎΠ²ΡΠ΅: ΠΈΡ
ΠΏΡΠΈΠ΄ΡΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Π·Π°ΠΏΡΡΠΊΠΎΠΌ, Π° ΠΏΡΠΎ Π·Π°ΠΏΡΡΠΊ ΠΎΠΏΡΡΡ Π½Π°Π΄ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΡ.
Π’ΠΎΡ ΠΆΠ΅ ΡΠΊΡΠΈΠΏΡ ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ Ρ ΡΠ΅Π±Ρ. Cron ΠΈΠ»ΠΈ systemd timer Π½Π° Π΄ΠΎΠΌΠ°ΡΠ½Π΅ΠΌ ΡΠ΅ΡΠ²Π΅ΡΠ΅. Π’ΠΎΠΊΠ΅Π½ Π»Π΅ΠΆΠΈΡ Π½Π° ΠΌΠΎΠ΅ΠΉ ΠΌΠ°ΡΠΈΠ½Π΅, Π° Π½Π΅ Ρ GitHub. ΠΠΈΠ½ΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΎ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°ΠΉΠΌΠ΅Ρ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, Π·Π° ΠΊΠΎΡΠΎΡΡΠΌ Π½Π°Π΄ΠΎ ΡΠ»Π΅Π΄ΠΈΡΡ.
Π’ΠΎΡ ΠΆΠ΅ ΡΠΊΡΠΈΠΏΡ ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ Π² GitHub Actions. ΠΡΠ΄Π΅Π»ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ workflow, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π· Π² Π½ΠΎΡΡ ΡΠ²Π΅ΡΡΠ΅Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ°ΠΌΠΈ. Π‘Π΅ΡΠ²Π΅Ρ Π½Π΅ Π½ΡΠΆΠ΅Π½, Π»ΠΎΠ³ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° Π²ΠΈΠ΄Π½Ρ Π² Actions.
Π― Π²ΡΠ±ΡΠ°Π» ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π²Π°ΡΠΈΠ°Π½Ρ.
ΠΠΎΡΠ΅ΠΌΡ GitHub Actions ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ
Π Π°ΡΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π² Actions ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π½Π΅ ΡΠ°ΡΠ΅ ΡΠ°Π·Π° Π² ΠΏΡΡΡ ΠΌΠΈΠ½ΡΡ, Π²ΡΠ΅ΠΌΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π² UTC. Π ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π·Π°ΠΏΡΡΠΊ ΠΏΠΎ ΡΠ°ΡΠΏΠΈΡΠ°Π½ΠΈΡ ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ, Π΅ΡΠ»ΠΈ 60 Π΄Π½Π΅ΠΉ Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π½Π΅ Π±ΡΠ»ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ4. Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠΊΡΠΈΠΏΡΠΎΠΌ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ΅Π΄ΠΊΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ ΡΠΈΡ
ΠΎ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π» Π±Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ. ΠΡΡΡΠ΄Π° ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΉ juev/watch-all.
Π£ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ Π·Π°ΠΏΡΡΠΊΠΈ ΡΡΠ°ΡΡΡ ΠΌΠΈΠ½ΡΡΡ Actions. ΠΠ° Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠΌ ΠΏΠ»Π°Π½Π΅ ΠΈΡ 2000 Π² ΠΌΠ΅ΡΡΡ, Π° Π² ΠΏΡΠ±Π»ΠΈΡΠ½ΡΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΡ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΡ ΡΠ°Π½Π½Π΅ΡΠ°Ρ Actions Π±Π΅ΡΠΏΠ»Π°ΡΠ½Ρ5. Π ΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΠΎΠ½ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ°ΠΌΠΈ Π·Π°Π½ΡΠ» 31 ΡΠ΅ΠΊΡΠ½Π΄Ρ, Π½ΠΎΡΠ½ΠΎΠΉ Π·Π°ΠΏΡΡΠΊ Π±Π΅Π· Π½ΠΎΠ²ΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΎΠΊ ΠΊΠΎΡΠΎΡΠ΅. Π Π°Π· Π² Π½ΠΎΡΡ β ΡΡΠΎ ΠΎΠΊΠΎΠ»ΠΎ 30 Π·Π°ΠΏΡΡΠΊΠΎΠ² Π² ΠΌΠ΅ΡΡΡ, Π΄ΠΎ Π»ΠΈΠΌΠΈΡΠ° Π΄Π°Π»Π΅ΠΊΠΎ. Π§Π°ΡΠ΅ Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½Π΅ ΡΡΠ°Π»: Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ ΠΏΠΎΠ΄ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ Π½Π΅ ΠΏΠΎΠ·ΠΆΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ Π½ΠΎΡΠΈ, ΡΡΠΎΠ³ΠΎ Ρ Π²Π°ΡΠ°Π΅Ρ.
Π Π°ΡΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π²ΡΠ±ΡΠ°Π½ΠΎ Π½Π΅ Π½Π° Π½Π°ΡΠ°Π»ΠΎ ΡΠ°ΡΠ°. ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°Π΅Ρ, ΡΡΠΎ ΠΏΠΎΠ΄ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ schedule Π·Π°Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, Π° Π² Ρ
ΡΠ΄ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π·Π°Π΄Π°Π½ΠΈΡ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡΡΡ, ΠΈ ΠΏΠΈΠΊ Π½Π°Π³ΡΡΠ·ΠΊΠΈ ΠΏΡΠΈΡ
ΠΎΠ΄ΠΈΡΡΡ Π½Π° Π½Π°ΡΠ°Π»ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΡΠ°4.
ΠΠ°ΠΊΠΎΠΉ Π½ΡΠΆΠ΅Π½ ΡΠΎΠΊΠ΅Π½
ΠΡΠΎ ΡΠ°ΠΌΠ°Ρ Π½Π΅ΠΎΡΠ΅Π²ΠΈΠ΄Π½Π°Ρ ΡΠ°ΡΡΡ.
GITHUB_TOKENΠ½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ. ΠΠ½ Π²ΡΠ΄Π°ΡΡΡΡ workflow Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ, Π° ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠ° ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ Π°ΠΊΠΊΠ°ΡΠ½ΡΡ.- Fine-grained PAT Π½Π΅ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ. Π Π΅Π³ΠΎ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Β«WatchingΒ» ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ
GET /user/subscriptionsΠΈGET /users/{username}/subscriptions, ΠΎΠ±Π° Π½Π° ΡΡΠ΅Π½ΠΈΠ΅6.PUT /repos/{owner}/{repo}/subscriptionΠ² ΡΠΏΠΈΡΠΊΠ΅ Π½Π΅Ρ. - ΠΡΡΠ°ΡΡΡΡ classic PAT ΡΠΎ scope
notificationsΠΈrepo.notificationsΠ½ΡΠΆΠ΅Π½ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ,repoΠ½ΡΠΆΠ΅Π½, ΡΡΠΎΠ±Ρ Π²ΠΈΠ΄Π΅ΡΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ.
ΠΠΎΠΉ ΠΎΠ±ΡΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Π½ gh ΡΠΎΠΆΠ΅ Π½Π΅ Π³ΠΎΠ΄ΠΈΡΡΡ: Ρ Π½Π΅Π³ΠΎ scope admin:public_key, gist, read:org ΠΈ repo, Π±Π΅Π· notifications. ΠΠ° Π·Π°ΠΏΡΠΎΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ 404, ΠΈ gh ΡΠ°ΠΌ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΠ΅Π³ΠΎ Π½Π΅ Ρ
Π²Π°ΡΠ°Π΅Ρ:
gh: This API operation needs the "notifications" scope. To request it, run: gh auth refresh -h github.com -s notifications
Π’ΠΎΠΊΠ΅Π½ Π²ΡΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΡΠ°ΠΊ:
- ΠΡΠΊΡΠΎΠΉΡΠ΅ https://github.com/settings/tokens/new?scopes=repo,notifications&description=watch-all . ΠΡΠΎ ΡΠΎΡΠΌΠ° classic PAT, scope Π² Π½Π΅ΠΉ ΡΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΠ΅Π½Ρ.
- ΠΡΠ±Π΅ΡΠΈΡΠ΅ ΡΡΠΎΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ.
- ΠΠ°ΠΆΠΌΠΈΡΠ΅ Β«Generate tokenΒ» ΠΈ ΡΠΊΠΎΠΏΠΈΡΡΠΉΡΠ΅ ΡΠΎΠΊΠ΅Π½.
- Π‘ΠΎΡ
ΡΠ°Π½ΠΈΡΠ΅ Π΅Π³ΠΎ Π² ΡΠ΅ΠΊΡΠ΅Ρ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ
gh secret set WATCH_TOKEN -R juev/watch-all. ΠΠΎΠΌΠ°Π½Π΄Π° ΠΏΠΎΠΏΡΠΎΡΠΈΡ Π²ΡΡΠ°Π²ΠΈΡΡ ΡΠΎΠΊΠ΅Π½.
ΠΡΠΎ ΡΠΈΡΠΎΠΊΠΈΠΉ ΡΠΎΠΊΠ΅Π½: repo Π΄Π°ΡΡ ΠΏΠΎΠ»Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠΌ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡΠΌ. ΠΠ΅ΠΆΠΈΡ ΠΎΠ½ Π² ΡΠ΅ΠΊΡΠ΅ΡΠ°Ρ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ²Π°ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, ΠΈ workflow ΠΎΡΠ΄Π°ΡΡ Π΅Π³ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΡΠΈΠΏΡΡ. ΠΠΎΠ³Π΄Π° ΡΡΠΎΠΊ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈΡΡΠ΅ΡΡΡ, Π½ΠΎΡΠ½ΠΎΠΉ Π·Π°ΠΏΡΡΠΊ Π½Π°ΡΠ½ΡΡ ΠΏΠ°Π΄Π°ΡΡ, ΠΈ ΡΠΎΠΊΠ΅Π½ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΡΡΡΠΈΡΡ Π·Π°Π½ΠΎΠ²ΠΎ.
ΠΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½ ΡΠΊΡΠΈΠΏΡ
Π‘ΠΊΡΠΈΠΏΡ watch-all.sh ΠΏΠΎΠ΄ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ, Π³Π΄Π΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ Π΅ΡΡ Π½Π΅Ρ:
gh api --paginate 'user/repos?affiliation=owner&per_page=100' \
-q '.[] | select((.archived or .fork) | not) | .full_name' | sort -u > "$work/owned"
gh api --paginate 'user/subscriptions?per_page=100' \
-q '.[].full_name' | sort -u > "$work/watched"
{ grep -v -e '^#' -e '^[[:space:]]*$' "$here/exclude.txt" 2>/dev/null || true; } \
| sort -u > "$work/excluded"
comm -23 "$work/owned" "$work/watched" | comm -23 - "$work/excluded" > "$work/missing"
while read -r repo; do
if (( dry_run )); then
echo "would watch $repo"
else
gh api -X PUT "repos/$repo/subscription" -F subscribed=true -F ignored=false --silent
echo "watched $repo"
fi
done < "$work/missing"
ΠΠΎΡΡΠ΄ΠΎΠΊ ΡΠ°ΠΊΠΎΠΉ:
- Π‘ΠΊΡΠΈΠΏΡ Π±Π΅ΡΡΡ ΠΌΠΎΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Π±Π΅Π· Π°ΡΡ ΠΈΠ²Π½ΡΡ ΠΈ Π±Π΅Π· ΡΠΎΡΠΊΠΎΠ².
- Π‘ΠΊΡΠΈΠΏΡ Π±Π΅ΡΡΡ ΡΠ΅ΠΊΡΡΠΈΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ.
- Π‘ΠΊΡΠΈΠΏΡ Π²ΡΡΠΈΡΠ°Π΅Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ ΠΈ
exclude.txt. - ΠΠ° ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ ΡΠΊΡΠΈΠΏΡ ΡΡΠ°Π²ΠΈΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ.
ΠΠ°ΠΏΡΠΎΡΠΎΠ² Π½Π° Π·Π°ΠΏΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΡΠΎΠ»ΡΠΊΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ Π½ΠΎΠ²ΡΡ
ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π², Π° Π½Π΅ 89 ΠΊΠ°ΠΆΠ΄ΡΡ Π½ΠΎΡΡ. Π‘ ΡΠ»Π°Π³ΠΎΠΌ --dry-run ΡΠΊΡΠΈΠΏΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ°ΡΠ°Π΅Ρ, Π½Π° ΡΡΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π»ΡΡ Π±Ρ.
Π€Π°ΠΉΠ» ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π½ΡΠΆΠ΅Π½ ΠΈΠ·-Π·Π° ΠΎΠ΄Π½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ. PUT Ρ subscribed=true ΡΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈ ΡΡΡΠ½ΡΡ ΠΎΡΠΏΠΈΡΠΊΡ, ΠΈ ΡΠ΅ΠΆΠΈΠΌ Ignore. ΠΡΠ»ΠΈ Ρ ΡΠΎΠ·Π½Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠΏΠΈΡΡΡΡ ΠΎΡ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ, Π½ΠΎΡΠ½ΠΎΠΉ Π·Π°ΠΏΡΡΠΊ ΠΏΠΎΠ΄ΠΏΠΈΡΠ΅Ρ ΠΌΠ΅Π½Ρ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. Π§ΡΠΎΠ±Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ Π±ΡΠ»ΠΎ, ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ Π½ΡΠΆΠ½ΠΎ Π²ΠΏΠΈΡΠ°ΡΡ Π² exclude.txt.
Π€ΠΎΡΠΊΠΈ Ρ ΠΈΡΠΊΠ»ΡΡΠΈΠ» ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ dry-run: ΡΡΠ΅Π΄ΠΈ 53 ΠΊΠ°Π½Π΄ΠΈΠ΄Π°ΡΠΎΠ² ΠΈΡ ΠΎΠΊΠ°Π·Π°Π»ΠΎΡΡ 14, ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎΡ Π½ΠΈΡ ΠΌΠ½Π΅ Π½Π΅ Π½ΡΠΆΠ½Ρ.
Workflow ΠΊΠΎΡΠΎΡΠΊΠΈΠΉ:
name: watch-all
on:
schedule:
- cron: '17 0 * * *' # 03:17 MSK
workflow_dispatch:
permissions:
contents: read
jobs:
watch:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v5
- run: ./watch-all.sh
env:
GH_TOKEN: ${{ secrets.WATCH_TOKEN }}
workflow_dispatch ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ ΡΡΠΊΠ°ΠΌΠΈ, Π½Π΅ Π΄ΠΎΠΆΠΈΠ΄Π°ΡΡΡ Π½ΠΎΡΠΈ. gh Π½Π° ΡΠ°Π½Π½Π΅ΡΠ΅ GitHub ΡΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΠΈ Π±Π΅ΡΡΡ ΡΠΎΠΊΠ΅Π½ ΠΈΠ· GH_TOKEN.
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ
ΠΠ΅ΡΠ²ΡΠΉ Π·Π°ΠΏΡΡΠΊ Ρ ΡΠ΄Π΅Π»Π°Π» Π²ΡΡΡΠ½ΡΡ. Π‘ΠΊΡΠΈΠΏΡ Π½Π°ΡΡΠ» 89 ΡΠ²ΠΎΠΈΡ
ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π² Π±Π΅Π· ΡΠΎΡΠΊΠΎΠ² ΠΈ Π°ΡΡ
ΠΈΠ²Π½ΡΡ
, ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ Π½Π΅ Π±ΡΠ»ΠΎ Ρ 39 ΠΈΠ· Π½ΠΈΡ
, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Ρ brook, claude ΠΈ Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ watch-all. ΠΡΠ΅ 39 ΠΎΠ½ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π» Π·Π° 31 ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΠΎΠ²ΡΠΎΡΠ½ΡΠΉ dry-run ΠΏΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Π» to watch: 0, Π° API Π΄Π»Ρ juev/brook ΠΎΡΠ²Π΅ΡΠΈΠ»ΠΎ "subscribed": true.
ΠΡΠ΅Π³ΠΎ ΠΏΠΎΠ΄ΠΏΠΈΡΠΎΠΊ Ρ ΠΌΠ΅Π½Ρ ΡΠ΅ΠΏΠ΅ΡΡ 144, Π±ΠΎΠ»ΡΡΠ΅ 89. Π Π°Π·Π½ΠΈΡΠ° β ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ Π½Π° ΡΠΎΡΠΊΠΈ, Π°ΡΡ ΠΈΠ²Π½ΡΠ΅ ΠΈ ΡΡΠΆΠΈΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ. Π‘ΠΊΡΠΈΠΏΡ ΠΈΡ Π½Π΅ ΡΡΠΎΠ³Π°Π΅Ρ: ΠΎΠ½ ΡΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΠΈ, Π½ΠΎ Π½ΠΈΠΊΠΎΠ³Π΄Π° ΠΈΡ Π½Π΅ ΡΠ½ΠΈΠΌΠ°Π΅Ρ.
ΠΠ°Π»ΡΡΠ΅ workflow Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΡ Π½ΠΎΡΡ Π² 03:17 ΠΏΠΎ ΠΠΎΡΠΊΠ²Π΅, ΠΈ Π½ΠΎΠ²ΡΠΉ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ ΠΏΠΎΠ΄ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ Π½Π΅ ΠΏΠΎΠ·ΠΆΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΡΡΠ°.
About notifications , ΡΠ°Π·Π΄Π΅Π» ΠΏΡΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠΊΡ. ↩︎
REST API: Watching , ΠΌΠ΅ΡΠΎΠ΄Ρ Β«Set a repository subscriptionΒ» ΠΈ Β«List repositories watched by the authenticated userΒ». ↩︎
Events that trigger workflows , ΡΠ°Π·Π΄Π΅Π»
schedule. ↩︎ ↩︎GitHub Actions billing , ΡΠ°Π±Π»ΠΈΡΠ° Π²ΠΊΠ»ΡΡΡΠ½Π½ΡΡ ΠΌΠΈΠ½ΡΡ. ↩︎
Permissions required for fine-grained personal access tokens , ΡΠ°Π·Π΄Π΅Π» Β«User permissions for “Watching”Β». ↩︎