From c5a2482221a88f2b0aeba4478baf702eb2ccf2ed Mon Sep 17 00:00:00 2001 From: Igor Pecovnik Date: Mon, 16 Dec 2024 21:31:10 +0100 Subject: [PATCH] Pull mirrors from database and display its status --- .github/workflows/pull-mirrors-from-db.yml | 81 ++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 .github/workflows/pull-mirrors-from-db.yml diff --git a/.github/workflows/pull-mirrors-from-db.yml b/.github/workflows/pull-mirrors-from-db.yml new file mode 100644 index 00000000..13074de0 --- /dev/null +++ b/.github/workflows/pull-mirrors-from-db.yml @@ -0,0 +1,81 @@ +name: "Pull mirrors from database" + +on: + push: +# branches: +# - master + workflow_dispatch: + +jobs: + + Build: + name: "Pull" + runs-on: ubuntu-24.04 + if: ${{ github.repository_owner == 'armbian' }} + steps: + + - name: Checkout main documentation + uses: actions/checkout@v4 + with: + repository: 'armbian/documentation' + path: 'documentation' + + - name: Make docs + run: | + + sudo apt-get -y install jq curl + + DOCUMENT="mirrors.md" + + echo "| Site | Time Zone | Flag | Speed | Packages | Images | Archive | Rsync |" > ${DOCUMENT} + echo "|:-----|:----------|------|-------:|:--------:|:------:|:-------:|:-----:|" >> ${DOCUMENT} + + # pull mirrors + JQ=$(curl -s -H "Authorization: Token ${{ secrets.NETBOX_TOKEN }}" -H "Accept: application/json; indent=4" "${{ secrets.NETBOX_API }}/virtualization/virtual-machines/?limit=500&name__empty=false&role=mirror") + for i in $(echo $JQ | jq '.results[] | .id'); do + NAME=$(echo $JQ | jq ".results[] | select(.id == $i) | .name" | sed "s/\"//g") + SITE_ID=$(echo $JQ | jq ".results[] | select(.id == $i) | .site.id") + SITE_STATUS=$(echo $JQ | jq -r ".results[] | select(.id == $i) | .status.value") + SITE_TAGS=$(echo $JQ | jq -r ".results[] | select(.id == $i) | .tags[].slug" | xargs ) + SITEQ=$(curl -s -H "Authorization: Token ${NETBOX}" -H "Accept: application/json; indent=4" "${NETBOX_API}/dcim/sites/?limit=500&name__empty=false&id=$SITE_ID") + SITE_NAME=$(echo $SITEQ | jq -r ".results[] | select(.id == $SITE_ID) | .name") + SITE_REGION=$(echo $SITEQ | jq -r ".results[] | select(.id == $SITE_ID) | .region.display") + SITE_TZ=$(echo $SITEQ | jq -r ".results[] | select(.id == $SITE_ID) | .time_zone") + SITE_LATITUDE=$(echo $SITEQ | jq ".results[] | select(.id == $SITE_ID) | .latitude") + SITE_LONGITUDE=$(echo $SITEQ | jq ".results[] | select(.id == $SITE_ID) | .longitude") + SITE_SPEED=$(echo $SITEQ | jq -r ".results[] | select(.id == $SITE_ID) | .custom_fields.download_speed") + IP=$(dig +short ${NAME} | tail -1) + SITE_FLAG=$(curl --max-time 5 -s http://ipwhois.app/json/${IP} | jq -r '.country_code') + + # if site is broken show different label + if [[ $SITE_STATUS != "active" ]]; then LABEL=":x:"; else LABEL=":white_check_mark:"; fi + + if [[ "${SITE_TAGS}" == *"debs "* ]]; then FIELD1="$LABEL"; else FIELD1=""; fi + if [[ "${SITE_TAGS}" == *"images"* ]]; then FIELD2="$LABEL"; else FIELD2=""; fi + if [[ "${SITE_TAGS}" == *"archive"* ]]; then FIELD3="$LABEL"; else FIELD3=""; fi + if [[ "${SITE_TAGS}" == *"rsync"* ]]; then FIELD4="$LABEL"; else FIELD4=""; fi + + echo "| [$SITE_NAME](https://$NAME) | $SITE_TZ | [![$SITE_REGION](https://flagsapi.com/$SITE_FLAG/shiny/32.png)](https://www.openstreetmap.org/search?lat=$SITE_LATITUDE&lon=$SITE_LONGITUDE) | $SITE_SPEED Mbps | $FIELD1 | $FIELD2 | $FIELD3 | $FIELD4 |" >> ${DOCUMENT} + sleep 1 + done + + cat $DOCUMENT + + - name: Create Pull Request to documentation + uses: peter-evans/create-pull-request@v7 + with: + token: ${{ secrets.GITHUB_TOKEN }} + path: documentation + commit-message: '`Automatic` documentation update' + signoff: false + branch: auto-update-docs + delete-branch: true + title: '`Automatic` documentation update' + body: | + Generate documentation. + + labels: | + Needs review + #assignees: igorpecovnik + #reviewers: Must be org collaborator + draft: false