-
-
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 26eb3b3
Showing
1 changed file
with
337 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,337 @@ | ||
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 || true) | ||
mkdir -p status | ||
if [[ -z "${OUT}" ]]; then | ||
echo "true" >> status/${SERVER_ID} | ||
echo "STATUS=true" >> $GITHUB_ENV | ||
elif [[ "${exit_status}" -eq 0 ]]; then | ||
echo "not_in_sync" >> status/${SERVER_ID} | ||
echo "STATUS=not_in_sync" >> $GITHUB_ENV | ||
elif [[ "${exit_status}" -eq 124 ]]; then | ||
echo "timeout" >> status/${SERVER_ID} | ||
echo "STATUS=not_in_sync" >> $GITHUB_ENV | ||
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: | | ||
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/ || exit_status=$? | ||
fi | ||
cd .. | ||
OUT=$(diff -rq compare debs || true) | ||
mkdir -p status | ||
if [[ -z "${OUT}" ]]; then | ||
echo "true" >> status/${SERVER_ID} | ||
echo "STATUS=true" >> $GITHUB_ENV | ||
elif [[ "${exit_status}" -eq 0 ]]; then | ||
echo "not_in_sync" >> status/${SERVER_ID} | ||
echo "STATUS=not_in_sync" >> $GITHUB_ENV | ||
elif [[ "${exit_status}" -eq 124 ]]; then | ||
echo "timeout" >> status/${SERVER_ID} | ||
echo "STATUS=not_in_sync" >> $GITHUB_ENV | ||
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 -l status/ | ||
echo "--" | ||
ls -1 status/ | 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 | ||
|
||
- uses: robinraju/[email protected] | ||
with: | ||
repository: "P3TERX/GeoLite.mmdb" | ||
tag: '2024.12.10' | ||
fileName: "*.mmdb" | ||
|
||
- 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/ | ||
cp ${{ github.workspace }}/*.mmdb 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 |