Skip to content

Commit

Permalink
Refactored redirector script generation
Browse files Browse the repository at this point in the history
  • Loading branch information
igorpecovnik committed Dec 14, 2024
1 parent 1b975db commit 327910d
Showing 1 changed file with 322 additions and 0 deletions.
322 changes: 322 additions & 0 deletions .github/workflows/generate-redirector-config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,322 @@
name: "Update redirector yaml config"
# Trigger this workflow on a manual dispatch or a scheduled time
on:
push:
#schedule:
# - cron: '0 * * * *' # Run every hour
workflow_dispatch: # Manually triggered via GitHub Actions UI

env:
GEODB: "/scripts/redirect-config/GeoLite2-City.mmdb"
ASNDB: "/scripts/redirect-config/GeoLite2-ASN.mmdb"
DL_MAP: "/scripts/redirect-config/all-images.json"
SOURCE_OF_TRUTH: "[email protected]:/storage/www/"

concurrency:
group: redirector
cancel-in-progress: false

jobs:

Check:

name: "Check permissions"
runs-on: "ubuntu-24.04"
steps:

- name: "Check permissions"
uses: armbian/actions/team-check@main
with:
ORG_MEMBERS: ${{ secrets.ORG_MEMBERS }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
TEAM: "Release manager"

- name: "Start log"
run: |
echo "# Test summary" >> $GITHUB_STEP_SUMMARY
build:
name: "Get source of truth"
runs-on: ubuntu-24.04
needs: Check
strategy:
fail-fast: true
matrix:
platform:
- beta
- apt
- dl
steps:

- name: "Install dependencies: lftp"
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: lftp
version: 1.0

- name: "Download from ${{ env.SOURCE_OF_TRUTH }}${{ matrix.platform }}"
run: |
mkdir -p source destination
if [[ "${{ matrix.platform }}" == "dl" ]]; then
cd source ; lftp -e "mirror --include-glob=*/archive/*.torrent --parallel=64; exit" https://rsync.armbian.com/${{ matrix.platform }}
cd ..; find source/. -mindepth 3 -exec mv -i -- {} destination/ \;
else
cd destination; lftp -e "mirror --parallel=64; exit" https://rsync.armbian.com/${{ matrix.platform }}/dists
fi
- name: "Upload ${{ matrix.platform }} index"
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.platform }}
path: destination
compression-level: 0
retention-days: 2

Debs-beta-index:
name: "Compare beta deb mirrors"
needs: build
outputs:
matrix: ${{steps.json.outputs.JSON_CONTENT}}
runs-on: ubuntu-24.04
steps:

- name: "Get beta packages mirrors from database"
id: json
run: |
echo 'JSON_CONTENT<<EOF' >> $GITHUB_OUTPUT
curl -H "Authorization: Token ${{ secrets.NETBOX_TOKEN }}" -H "Accept: application/json; indent=4" \
"${{ secrets.NETBOX_API }}/virtualization/virtual-machines/?limit=500&name__empty=false&tag=debs-beta&status=active" \
| jq '.results[] | .name,.custom_fields["download_path_debs"],.id' | sed "s|null|beta|" | sed "s/\"//g" \
| xargs -n3 -d'\n' | sed -e 's/\s\+/\//' | sed "s/ /,/" | jq -cnR '[inputs | select(length>0)]' | jq >> $GITHUB_OUTPUT
echo 'EOF' >> $GITHUB_OUTPUT
Debs-stable-index:
name: "Compare stable deb mirrors"
needs: build
outputs:
matrix: ${{steps.json.outputs.JSON_CONTENT}}
runs-on: ubuntu-24.04
steps:

- name: "Get beta packages mirrors from database"
id: json
run: |
echo 'JSON_CONTENT<<EOF' >> $GITHUB_OUTPUT
curl -H "Authorization: Token ${{ secrets.NETBOX_TOKEN }}" -H "Accept: application/json; indent=4" \
"${{ secrets.NETBOX_API }}/virtualization/virtual-machines/?limit=500&name__empty=false&tag=debs&status=active" \
| jq '.results[] | .name,.custom_fields["download_path_debs"],.id' | sed "s|null|apt|" | sed "s/\"//g" \
| xargs -n3 -d'\n' | sed -e 's/\s\+/\//' | sed "s/ /,/" | jq -cnR '[inputs | select(length>0)]' | jq >> $GITHUB_OUTPUT
echo 'EOF' >> $GITHUB_OUTPUT
Debs-beta:
name: "B"
runs-on: ubuntu-24.04
needs: [ Debs-beta-index ]
outputs:
matrix: ${{needs.Debs-beta-index.outputs.matrix}}
if: ${{ needs.Debs-beta-index.outputs.matrix != '[]' && needs.Debs-beta-index.outputs.matrix != '' }}
timeout-minutes: 6
strategy:
fail-fast: false
matrix:
node: ${{fromJson(needs.Debs-beta-index.outputs.matrix)}}

steps:

- uses: actions/download-artifact@v4
with:
name: beta
path: debs-beta

- name: "Install dependencies"
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: lftp
version: 1.0

- name: "Check ${{ matrix.node }} "
run: |
SERVER_URL=$(echo "${{ matrix.node }}" | cut -d"," -f1)
SERVER_ID=$(echo "${{ matrix.node }}" | cut -d"," -f2)
echo "SERVER_ID=${SERVER_ID}" >> $GITHUB_ENV
mkdir -p compare; cd compare
if curl --output /dev/null --silent --head --fail "https://${SERVER_URL}/dists/"; then
timeout 5m lftp -e "mirror --parallel=16; exit" https://${SERVER_URL}/dists/ || true
fi
cd ..
OUT=$(diff -rq compare debs-beta || true)
if [[ -z "${OUT}" ]]; then
mkdir -p status
echo "true" >> status/${SERVER_ID}
echo "STATUS=true" >> $GITHUB_ENV
else
echo "Not in sync, timeout or broken <a href=http://${SERVER_URL}>${SERVER_URL}</a>" >> $GITHUB_STEP_SUMMARY
fi
- name: Upload ${{ env.STATUS }} for ${{ matrix.node }}
uses: actions/upload-artifact@v4
with:
name: debs-beta-${{ env.SERVER_ID }}
path: status
if-no-files-found: ignore

Debs-stable:
name: "S"
runs-on: ubuntu-24.04
needs: [ Debs-stable-index ]
outputs:
matrix: ${{needs.Debs-stable-index.outputs.matrix}}
if: ${{ needs.Debs-stable-index.outputs.matrix != '[]' && needs.Debs-stable-index.outputs.matrix != '' }}
timeout-minutes: 12
strategy:
fail-fast: false
matrix:
node: ${{fromJson(needs.Debs-stable-index.outputs.matrix)}}

steps:

- uses: actions/download-artifact@v4
with:
name: apt
path: debs

- name: "Install dependencies"
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: lftp
version: 1.0

- name: "Check ${{ matrix.node }} "
run: |
echo "https://${${{ matrix.node }}//,(*)/}/dists/"
SERVER_URL=$(echo "${{ matrix.node }}" | cut -d"," -f1)
SERVER_ID=$(echo "${{ matrix.node }}" | cut -d"," -f2)
echo "SERVER_ID=${SERVER_ID}" >> $GITHUB_ENV
mkdir -p compare; cd compare
if curl --output /dev/null --silent --head --fail "https://${SERVER_URL}/dists/"; then
timeout 11m lftp -e "mirror --parallel=16; exit" https://${SERVER_URL}/dists/ || true
fi
cd ..
OUT=$(diff -rq compare debs || true)
if [[ -z "${OUT}" ]]; then
mkdir -p status
echo "true" >> status/${SERVER_ID}
echo "STATUS=true" >> $GITHUB_ENV
else
echo "Not in sync, timeout or broken <a href=http://${SERVER_URL}>${SERVER_URL}</a>" >> $GITHUB_STEP_SUMMARY
fi
- name: Upload ${{ env.STATUS }} for ${{ matrix.node }}
uses: actions/upload-artifact@v4
with:
name: debs-${{ env.SERVER_ID }}
path: status
if-no-files-found: ignore

download:
needs: [ Debs-beta,Debs-stable ]
runs-on: ubuntu-24.04
steps:

- name: Download All Artifacts
uses: actions/download-artifact@v4
with:
path: status
pattern: debs-beta-*
merge-multiple: true

- name: "Check"
run: |
ls -1 downloads/ | sed ':a; N; s/\n/ /; ta'
echo "failoverserver=$(ls -1 status/ | sed ':a; N; s/\n/ /; ta') " >> $GITHUB_ENV
echo "reloadKey=$(openssl rand -hex 16)" >> $GITHUB_ENV
- name: Test debs
uses: armbian/actions/make-yaml-redirector@redirector
with:
variant: debs-beta
failoverserver: "${{ env.failoverserver }}"
port: 8083
geodb: "${{ env.GEODB }}"
asndb: "${{ env.ASNDB }}"
dl_map: "${{ env.DL_MAP }}"
reloadKey: ${{ env.reloadKey }}
netbox: ${{ secrets.NETBOX_TOKEN }}

- name: Download All Artifacts
uses: actions/download-artifact@v4
with:
path: status
pattern: debs*
merge-multiple: true

- name: "Check"
run: |
ls -1 downloads/ | sed ':a; N; s/\n/ /; ta'
echo "failoverserver=$(ls -1 status/ | sed ':a; N; s/\n/ /; ta') " >> $GITHUB_ENV
echo "reloadKey=$(openssl rand -hex 16)" >> $GITHUB_ENV
- name: Test debs
uses: armbian/actions/make-yaml-redirector@redirector
with:
variant: debs
failoverserver: "${{ env.failoverserver }}"
port: 8083
geodb: "${{ env.GEODB }}"
asndb: "${{ env.ASNDB }}"
dl_map: "${{ env.DL_MAP }}"
reloadKey: ${{ env.reloadKey }}
netbox: ${{ secrets.NETBOX_TOKEN }}

Close:
needs: [ download ]
runs-on: ubuntu-24.04
steps:

- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
path: armbian.github.io

- name: Download All Artifacts
uses: actions/download-artifact@v4
with:
path: status
pattern: config-*
merge-multiple: true

- name: "Check"
run: |
ls -l status
echo "-"
ls -l ${{ github.workspace }}/
- name: Commit changes if any
run: |
cd armbian.github.io
git checkout data
mkdir -p data/
cp ${{ github.workspace }}/status/*.yaml data/
git config --global user.name "github-actions"
git config --global user.email "[email protected]"
git add data/.
git diff --cached --quiet || git commit -m "Update Redirector YAML configuration"
git push
- uses: geekyeggo/delete-artifact@v5
with:
name: |
debs-*
apt
beta
dl

0 comments on commit 327910d

Please sign in to comment.