Sync maintainers status #9665
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "Sync maintainers status" | |
# Script connects to the contacts database every 8 hours and updates | |
# BOARD_MAINTAINER property in the board config files. If there are any changes, | |
# it opens a Pull Request to https://github.com/armbian/build | |
# | |
# spdx-id: GPL-2.0-or-later | |
# copyright-owner: Igor Pecovnik | |
# Dependencies: lftp, jq | |
on: | |
schedule: | |
- cron: "0 * * * *" | |
workflow_dispatch: | |
jobs: | |
Build: | |
name: Maintainers sync | |
runs-on: ubuntu-latest | |
if: ${{ github.repository_owner == 'armbian' }} | |
steps: | |
- name: Checkout build repo | |
uses: actions/checkout@v4 | |
with: | |
repository: armbian/build | |
ref: main | |
fetch-depth: 0 | |
clean: false | |
- name: Install SSH key for storage | |
uses: shimataro/ssh-key-action@v2 | |
with: | |
key: ${{ secrets.KEY_UPLOAD }} | |
known_hosts: ${{ secrets.KNOWN_HOSTS_ARMBIAN_UPLOAD }} | |
if_key_exists: replace | |
- name: Install dependencies | |
run: | | |
# install dependencies | |
sudo apt-get -y -qq install jq | |
- name: Download armbian_maintainers.json | |
run: | | |
# download json that is prepared for this action in another cron job | |
rsync -e "ssh -p ${{ secrets.HOST_UPLOAD_PORT }}" -arvc ${{ secrets.HOST_UPLOAD_USER }}@${{ secrets.HOST_UPLOAD }}:/incoming/json/armbian_maintainers.json /tmp/ | |
- name: Update maintainers | |
run: | | |
# reset all maintainers so we generate from scratch | |
sed -i "s/BOARD_MAINTAINER.*/BOARD_MAINTAINER=\"\"/" config/boards/*.{conf,wip,eos,tvb} | |
# extract values fron JSON | |
declare -A MAINTAINERS | |
{ | |
# By default, bash run the pipe command in subshells | |
# which make variable can't be assigned to. | |
# And yes, lastpipe can solve it | |
# But this is better. | |
while read -r i; do | |
NAME="$(echo "$i" | jq --raw-output '.First_Name')" | |
BOARD="$(echo "$i" | jq --raw-output '.Maintaining')" | |
MAINTAINER_GITHUB="$(echo "$i" | jq --raw-output '.Github' | cut -d"/" -f4)" | |
if [[ "$BOARD" != null && "$MAINTAINER_GITHUB" != null ]]; then | |
echo "- [$NAME](https://github.com/${MAINTAINER_GITHUB})" | |
while read -r i; do | |
echo -e " - $i" | |
MAINTAINERS["$i"]+="$MAINTAINER_GITHUB " | |
done < <( echo "$BOARD" | sed "s/,/\n/g" | sort -u ) | |
fi | |
done < <(jq -c '.[]' /tmp/armbian_maintainers.json) | |
for cfg in config/boards/*.{conf,wip,csc,eos,tvb}; do | |
board_name="$(echo "${cfg##*/}" | sed -E 's/\..*//')" | |
declare -a maintainers | |
readarray -t maintainers < <(echo "${MAINTAINERS[${board_name}]}" | xargs -n1 | sort -u) | |
sed -i "s/BOARD_MAINTAINER=.*/BOARD_MAINTAINER=\"${maintainers[*]}\"/" "${cfg}" | |
done | |
} >> "$GITHUB_STEP_SUMMARY" | |
- name: Mark csc for no maintainer | |
run: | | |
grep BOARD_MAINTAINER=\"\" config/boards/*.{wip,conf} | cut -d":" -f1 | | |
while read -r line; do | |
if [[ "${line}" != "${line/.conf/.csc}" ]]; then | |
mv -v "$line" "${line/.conf/.csc}" | |
fi | |
if [[ "${line}" != "${line/.wip/.csc}" ]]; then | |
mv -v "$line" "${line/.wip/.csc}" | |
fi | |
done | |
- name: Re-generate CODEOWNERS | |
run: | | |
./.github/generate_CODEOWNERS.sh | |
- name: Create Pull Request | |
id: cpr | |
uses: peter-evans/create-pull-request@v6 | |
with: | |
token: ${{ secrets.ACCESS_TOKEN }} | |
commit-message: '`Automatic` board configs status synchronise' | |
#committer: Armbianworker <[email protected]> | |
#author: armbianworker <[email protected]> | |
signoff: false | |
branch: update-maintainers | |
delete-branch: true | |
title: '`Automatic` board configs status synchronise' | |
body: | | |
Update maintainers and board status | |
- synced status from the database | |
- rename to .`csc` where we don't have anyone | |
If you want to become a board maintainer, [adjust data here](https://www.armbian.com/update-data/). | |
Ref: [Board Maintainers Procedures and Guidelines](https://docs.armbian.com/Board_Maintainers_Procedures_and_Guidelines/) | |
labels: | | |
Needs review | |
#assignees: igorpecovnik | |
#reviewers: Must be org collaborator | |
draft: false |