policy/.forgejo/workflows/coc.yml

75 lines
No EOL
2.5 KiB
YAML

name: Sync Code of Conduct
on:
push:
branches:
- main
paths:
- 'CODE_OF_CONDUCT.md'
jobs:
sync-coc:
runs-on: debian-trixie
steps:
- name: Checkout Repository
uses: actions/checkout@v7
- name: Sync
env:
TOKEN: ${{ secrets.SPACEBOT_PAT }}
CURRENT_REPO: ${{ github.event.repository.name }}
SERVER_URL: ${{ github.server_url }}
TARGET_OWNER: "spacebar"
run: |
API_URL="${SERVER_URL}/api/v1/orgs/${TARGET_OWNER}/repos?limit=50"
REPOS=$(curl -s -o /tmp/repos.json -w "%{http_code}" -H "Authorization: token $TOKEN" "$API_URL")
if [ "$REPOS" != "200" ]; then
API_URL="${SERVER_URL}/api/v1/users/${TARGET_OWNER}/repos?limit=50"
curl -s -H "Authorization: token $TOKEN" "$API_URL" > /tmp/repos.json
fi
REPO_LIST=$(jq -r '.[].name' /tmp/repos.json 2>/dev/null)
if [ -z "$REPO_LIST" ] || [ "$REPO_LIST" = "null" ]; then
echo "Error: No repositories found or failed to fetch for owner: $TARGET_OWNER"
exit 1
fi
B64_TOKEN=$(echo -n "spacebot:$TOKEN" | base64 | tr -d '\n')
for REPO in $REPO_LIST; do
if [ "$REPO" = "$CURRENT_REPO" ]; then
continue
fi
echo "Processing repository: $REPO"
if ! git -c "http.extraHeader=Authorization: Basic $B64_TOKEN" clone "${SERVER_URL}/${TARGET_OWNER}/${REPO}.git" temp_repo 2>/dev/null; then
echo "Skipping $REPO: Unable to clone or access denied."
continue
fi
cp CODE_OF_CONDUCT.md temp_repo/CODE_OF_CONDUCT.md
cd temp_repo
if [ -n "$(git status --porcelain)" ]; then
git config user.name "spacebot"
git config user.email "spacebot@noreply.spbr.net"
git add CODE_OF_CONDUCT.md
git commit -m "chore: update COC according to spacebar/Pqqaaaqqolicy changes"
if git -c "http.extraHeader=Authorization: Basic $B64_TOKEN" push origin main 2>/dev/null || git -c "http.extraHeader=Authorization: Basic $B64_TOKEN" push origin master 2>/dev/null; then
echo "successfully updated $REPO"
else
echo "skipping $REPO: Push failed (L bozo)"
fi
else
echo "no changes detected for $REPO"
fi
cd ..
rm -rf temp_repo
done