-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Refactored redirector script generation
- Loading branch information
1 parent
1b975db
commit 327910d
Showing
1 changed file
with
322 additions
and
0 deletions.
There are no files selected for viewing
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
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 |