Infrastructure: Update redirector #7199
This file contains hidden or 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: "Infrastructure: Update CDN redirector" | |
| # Trigger this workflow on a manual dispatch or a scheduled time | |
| on: | |
| repository_dispatch: | |
| types: ["Infrastructure: Update redirector"] | |
| 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" | |
| CERTPATH: "/scripts/redirect-config/certdata.txt" | |
| SOURCE_OF_TRUTH: "https://armbian.atomonetworks.com" | |
| concurrency: | |
| group: ${{ github.workflow }} | |
| cancel-in-progress: false | |
| jobs: | |
| Check: | |
| name: "Check permissions" | |
| runs-on: "ubuntu-24.04" | |
| if: ${{ github.repository_owner == 'Armbian' }} | |
| steps: | |
| - name: "Check permissions" | |
| uses: armbian/actions/team-check@main | |
| with: | |
| ORG_MEMBERS: ${{ secrets.ORG_MEMBERS }} | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| TEAM: "Release manager" | |
| build: | |
| name: "Source of truth" | |
| runs-on: ubuntu-24.04 | |
| if: ${{ github.repository_owner == 'Armbian' }} | |
| needs: Check | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| platform: | |
| - beta | |
| - apt | |
| - dl | |
| - archive | |
| - cache | |
| 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: | | |
| set -euo pipefail | |
| mkdir -p source destination | |
| platform="${{ matrix.platform }}" | |
| source_of_truth="${{ env.SOURCE_OF_TRUTH }}" | |
| if [[ "$platform" =~ ^(dl|archive)$ ]]; then | |
| # Mirror only *.torrent files from */archive/ into ./source | |
| pushd source >/dev/null | |
| lftp -e "mirror --include-glob=*/archive/*.torrent --parallel=64; quit" "${source_of_truth}/${platform}" | |
| popd >/dev/null | |
| # Move top-level archive subdirs from source to destination | |
| find source/*/archive/ -mindepth 1 -maxdepth 1 -exec mv -i -- "{}" destination/ \; | |
| elif [[ "$platform" == "cache" ]]; then | |
| : | |
| touch source/valid | |
| touch destination/valid | |
| else | |
| # Mirror dists directly into ./destination | |
| pushd destination >/dev/null | |
| lftp -e "mirror --parallel=64; quit" "${source_of_truth}/${platform}/dists" | |
| popd >/dev/null | |
| fi | |
| - name: "Upload ${{ matrix.platform }} index" | |
| uses: actions/upload-artifact@v7 | |
| 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 | |
| Images-stable-index: | |
| name: "Compare stable images mirrors" | |
| needs: build | |
| outputs: | |
| matrix: ${{steps.json.outputs.JSON_CONTENT}} | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: "Get stable images 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=images&status=active" \ | |
| | jq '.results[] | .name,.custom_fields["download_path_images"],.id' | sed "s|null|dl|" | 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 | |
| Images-archive-index: | |
| name: "Compare archive images mirrors" | |
| needs: build | |
| outputs: | |
| matrix: ${{steps.json.outputs.JSON_CONTENT}} | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: "Get archive images 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=archive&status=active" \ | |
| | jq '.results[] | .name,.custom_fields["download_path_images"],.id' | sed "s|null|archive|" | 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 | |
| Cache-index: | |
| name: "Compare cache mirrors" | |
| needs: build | |
| outputs: | |
| matrix: ${{steps.json.outputs.JSON_CONTENT}} | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: "Get cache 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=cache&status=active" \ | |
| | jq '.results[] | .name,.custom_fields["download_path_cache"],.id' | sed "s|null|cache|" | 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: 7 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node: ${{fromJson(needs.Debs-beta-index.outputs.matrix)}} | |
| steps: | |
| - uses: actions/download-artifact@v8 | |
| 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 3m 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 "${SERVER_URL}" >> status/${SERVER_ID} | |
| echo "STATUS=not_in_sync" >> $GITHUB_ENV | |
| elif [[ "${exit_status}" -eq 124 ]]; then | |
| echo "timeout" >> status/${SERVER_ID} | |
| echo "${SERVER_URL}" >> status/${SERVER_ID} | |
| echo "STATUS=not_in_sync" >> $GITHUB_ENV | |
| fi | |
| - name: Upload ${{ env.STATUS }} for ${{ matrix.node }} | |
| uses: actions/upload-artifact@v7 | |
| 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: 7 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node: ${{fromJson(needs.Debs-stable-index.outputs.matrix)}} | |
| steps: | |
| - uses: actions/download-artifact@v8 | |
| 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 3m 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 "${SERVER_URL}" >> status/${SERVER_ID} | |
| echo "STATUS=not_in_sync" >> $GITHUB_ENV | |
| elif [[ "${exit_status}" -eq 124 ]]; then | |
| echo "timeout" >> status/${SERVER_ID} | |
| echo "${SERVER_URL}" >> status/${SERVER_ID} | |
| echo "STATUS=not_in_sync" >> $GITHUB_ENV | |
| fi | |
| - name: Upload ${{ env.STATUS }} for ${{ matrix.node }} | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: debs-${{ env.SERVER_ID }} | |
| path: status | |
| if-no-files-found: ignore | |
| Images-stable: | |
| name: "I" | |
| runs-on: ubuntu-24.04 | |
| needs: [ Images-stable-index ] | |
| outputs: | |
| matrix: ${{needs.Images-stable-index.outputs.matrix}} | |
| if: ${{ needs.Images-stable-index.outputs.matrix != '[]' && needs.Images-stable-index.outputs.matrix != '' }} | |
| timeout-minutes: 7 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node: ${{fromJson(needs.Images-stable-index.outputs.matrix)}} | |
| steps: | |
| - uses: actions/download-artifact@v8 | |
| with: | |
| name: dl | |
| path: dl | |
| - 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 source; cd source | |
| if curl --output /dev/null --silent --head --fail "https://${SERVER_URL}"; then | |
| timeout 3m lftp -e "mirror --include-glob=*/archive/*.torrent --parallel=64; exit" https://${SERVER_URL} || exit_status=$? | |
| cd .. | |
| find source/*/archive/ -mindepth 1 -maxdepth 1 -exec mv -i -- {} compare/ \; || true | |
| fi | |
| OUT=$(diff -rq compare dl || 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 "${SERVER_URL}" >> status/${SERVER_ID} | |
| echo "STATUS=not_in_sync" >> $GITHUB_ENV | |
| elif [[ "${exit_status}" -eq 124 ]]; then | |
| echo "timeout" >> status/${SERVER_ID} | |
| echo "${SERVER_URL}" >> status/${SERVER_ID} | |
| echo "STATUS=not_in_sync" >> $GITHUB_ENV | |
| fi | |
| - name: Upload ${{ env.STATUS }} for ${{ matrix.node }} | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: dl-${{ env.SERVER_ID }} | |
| path: status | |
| if-no-files-found: ignore | |
| Images-archive: | |
| name: "A" | |
| runs-on: ubuntu-24.04 | |
| needs: [ Images-archive-index ] | |
| outputs: | |
| matrix: ${{needs.Images-archive-index.outputs.matrix}} | |
| if: ${{ needs.Images-archive-index.outputs.matrix != '[]' && needs.Images-archive-index.outputs.matrix != '' }} | |
| timeout-minutes: 7 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node: ${{fromJson(needs.Images-archive-index.outputs.matrix)}} | |
| steps: | |
| - uses: actions/download-artifact@v8 | |
| with: | |
| name: archive | |
| path: archive | |
| - 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 source; cd source | |
| if curl --output /dev/null --silent --head --fail "https://${SERVER_URL}"; then | |
| timeout 3m lftp -e "mirror --include-glob=*/archive/*.torrent --parallel=64; exit" https://${SERVER_URL} || exit_status=$? | |
| cd .. | |
| find source/*/archive/ -mindepth 1 -maxdepth 1 -exec mv -i -- {} compare/ \; || true | |
| fi | |
| OUT=$(diff -rq compare archive || 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 "${SERVER_URL}" >> status/${SERVER_ID} | |
| echo "STATUS=not_in_sync" >> $GITHUB_ENV | |
| elif [[ "${exit_status}" -eq 124 ]]; then | |
| echo "timeout" >> status/${SERVER_ID} | |
| echo "${SERVER_URL}" >> status/${SERVER_ID} | |
| echo "STATUS=not_in_sync" >> $GITHUB_ENV | |
| fi | |
| - name: Upload ${{ env.STATUS }} for ${{ matrix.node }} | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: archive-${{ env.SERVER_ID }} | |
| path: status | |
| if-no-files-found: ignore | |
| Cache: | |
| name: "C" | |
| runs-on: ubuntu-24.04 | |
| needs: [ Cache-index ] | |
| outputs: | |
| matrix: ${{needs.Cache-index.outputs.matrix}} | |
| if: ${{ needs.Cache-index.outputs.matrix != '[]' && needs.Cache-index.outputs.matrix != '' }} | |
| timeout-minutes: 7 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node: ${{fromJson(needs.Cache-index.outputs.matrix)}} | |
| steps: | |
| - name: "Check ${{ matrix.node }} " | |
| run: | | |
| SERVER_ID=$(echo "${{ matrix.node }}" | cut -d"," -f2) | |
| echo "SERVER_ID=${SERVER_ID}" >> $GITHUB_ENV | |
| mkdir -p status | |
| echo "true" >> status/${SERVER_ID} | |
| echo "STATUS=true" >> $GITHUB_ENV | |
| - name: Upload ${{ env.STATUS }} for ${{ matrix.node }} | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: cache-${{ env.SERVER_ID }} | |
| path: status | |
| if-no-files-found: ignore | |
| download: | |
| needs: [ Debs-beta,Debs-stable,Images-stable,Images-archive,Cache ] | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Download All Artifacts | |
| uses: actions/download-artifact@v8 | |
| with: | |
| path: status | |
| pattern: debs-beta-* | |
| merge-multiple: true | |
| - name: "Start log" | |
| run: | | |
| echo "# Test summary" >> $GITHUB_STEP_SUMMARY | |
| - name: "Grep only those that are in sync" | |
| run: | | |
| echo "# Not in sync" >> $GITHUB_STEP_SUMMARY | |
| #echo "$(grep not_in_sync status/* | cut -d":" -f1 | cut -d"/" -f2 | sed ':a; N; s/\n/ /; ta') " >> $GITHUB_STEP_SUMMARY | |
| grep not_in_sync status/* | cut -d":" -f1 | xargs awk 'FNR==2{print}' >> $GITHUB_STEP_SUMMARY | |
| echo "# Timeouts" >> $GITHUB_STEP_SUMMARY | |
| grep timeout status/* | cut -d":" -f1 | xargs awk 'FNR==2{print}' >> $GITHUB_STEP_SUMMARY | |
| #echo "$(grep timeout status/* | cut -d":" -f1 | cut -d"/" -f2 | sed ':a; N; s/\n/ /; ta') " >> $GITHUB_STEP_SUMMARY | |
| echo "failoverserver=$(grep true status/* | cut -d":" -f1 | cut -d"/" -f2 | sed ':a; N; s/\n/ /; ta') " >> $GITHUB_ENV | |
| echo "reloadKey=$(openssl rand -hex 16)" >> $GITHUB_ENV | |
| rm -rf status | |
| - name: Test debs | |
| uses: armbian/actions/make-yaml-redirector@main | |
| with: | |
| variant: debs-beta | |
| failoverserver: "${{ env.failoverserver }}" | |
| port: 8083 | |
| geodb: "${{ env.GEODB }}" | |
| asndb: "${{ env.ASNDB }}" | |
| dl_map: "${{ env.DL_MAP }}" | |
| certDataPath: "${{ env.CERTPATH }}" | |
| reloadKey: ${{ env.reloadKey }} | |
| netbox: ${{ secrets.NETBOX_TOKEN }} | |
| netboxapi: ${{ secrets.NETBOX_API }} | |
| - name: Download All Artifacts | |
| uses: actions/download-artifact@v8 | |
| with: | |
| path: status | |
| pattern: debs* | |
| merge-multiple: true | |
| - name: "Grep only those that are in sync" | |
| run: | | |
| echo "# Not in sync" >> $GITHUB_STEP_SUMMARY | |
| #echo "$(grep not_in_sync status/* | cut -d":" -f1 | cut -d"/" -f2 | sed ':a; N; s/\n/ /; ta') " >> $GITHUB_STEP_SUMMARY | |
| grep not_in_sync status/* | cut -d":" -f1 | xargs awk 'FNR==2{print}' >> $GITHUB_STEP_SUMMARY | |
| echo "# Timeouts" >> $GITHUB_STEP_SUMMARY | |
| grep timeout status/* | cut -d":" -f1 | xargs awk 'FNR==2{print}' >> $GITHUB_STEP_SUMMARY | |
| #echo "$(grep timeout status/* | cut -d":" -f1 | cut -d"/" -f2 | sed ':a; N; s/\n/ /; ta') " >> $GITHUB_STEP_SUMMARY | |
| echo "failoverserver=$(grep true status/* | cut -d":" -f1 | cut -d"/" -f2 | sed ':a; N; s/\n/ /; ta') " >> $GITHUB_ENV | |
| echo "reloadKey=$(openssl rand -hex 16)" >> $GITHUB_ENV | |
| rm -rf status | |
| - name: Stable debs | |
| uses: armbian/actions/make-yaml-redirector@main | |
| with: | |
| variant: debs | |
| failoverserver: "${{ env.failoverserver }}" | |
| geodb: "${{ env.GEODB }}" | |
| asndb: "${{ env.ASNDB }}" | |
| dl_map: "${{ env.DL_MAP }}" | |
| certDataPath: "${{ env.CERTPATH }}" | |
| reloadKey: ${{ env.reloadKey }} | |
| netbox: ${{ secrets.NETBOX_TOKEN }} | |
| netboxapi: ${{ secrets.NETBOX_API }} | |
| - name: Download All Artifacts | |
| uses: actions/download-artifact@v8 | |
| with: | |
| path: status | |
| pattern: dl* | |
| merge-multiple: true | |
| - name: "Grep only those that are in sync" | |
| run: | | |
| echo "# Not in sync" >> $GITHUB_STEP_SUMMARY | |
| #echo "$(grep not_in_sync status/* | cut -d":" -f1 | cut -d"/" -f2 | sed ':a; N; s/\n/ /; ta') " >> $GITHUB_STEP_SUMMARY | |
| grep not_in_sync status/* | cut -d":" -f1 | xargs awk 'FNR==2{print}' >> $GITHUB_STEP_SUMMARY | |
| echo "# Timeouts" >> $GITHUB_STEP_SUMMARY | |
| grep timeout status/* | cut -d":" -f1 | xargs awk 'FNR==2{print}' >> $GITHUB_STEP_SUMMARY | |
| #echo "$(grep timeout status/* | cut -d":" -f1 | cut -d"/" -f2 | sed ':a; N; s/\n/ /; ta') " >> $GITHUB_STEP_SUMMARY | |
| echo "failoverserver=$(grep true status/* | cut -d":" -f1 | cut -d"/" -f2 | sed ':a; N; s/\n/ /; ta') " >> $GITHUB_ENV | |
| echo "reloadKey=$(openssl rand -hex 16)" >> $GITHUB_ENV | |
| rm -rf status | |
| - name: Images | |
| uses: armbian/actions/make-yaml-redirector@main | |
| with: | |
| variant: images | |
| failoverserver: "${{ env.failoverserver }}" | |
| port: 8081 | |
| geodb: "${{ env.GEODB }}" | |
| asndb: "${{ env.ASNDB }}" | |
| dl_map: "${{ env.DL_MAP }}" | |
| certDataPath: "${{ env.CERTPATH }}" | |
| reloadKey: ${{ env.reloadKey }} | |
| netbox: ${{ secrets.NETBOX_TOKEN }} | |
| netboxapi: ${{ secrets.NETBOX_API }} | |
| - name: Download All Artifacts | |
| uses: actions/download-artifact@v8 | |
| with: | |
| path: status | |
| pattern: archive* | |
| merge-multiple: true | |
| - name: "Grep only those that are in sync" | |
| run: | | |
| echo "# Not in sync" >> $GITHUB_STEP_SUMMARY | |
| #echo "$(grep not_in_sync status/* | cut -d":" -f1 | cut -d"/" -f2 | sed ':a; N; s/\n/ /; ta') " >> $GITHUB_STEP_SUMMARY | |
| grep not_in_sync status/* | cut -d":" -f1 | xargs awk 'FNR==2{print}' >> $GITHUB_STEP_SUMMARY | |
| echo "# Timeouts" >> $GITHUB_STEP_SUMMARY | |
| grep timeout status/* | cut -d":" -f1 | xargs awk 'FNR==2{print}' >> $GITHUB_STEP_SUMMARY | |
| #echo "$(grep timeout status/* | cut -d":" -f1 | cut -d"/" -f2 | sed ':a; N; s/\n/ /; ta') " >> $GITHUB_STEP_SUMMARY | |
| echo "failoverserver=$(grep true status/* | cut -d":" -f1 | cut -d"/" -f2 | sed ':a; N; s/\n/ /; ta') " >> $GITHUB_ENV | |
| echo "reloadKey=$(openssl rand -hex 16)" >> $GITHUB_ENV | |
| rm -rf status | |
| - name: Archive | |
| uses: armbian/actions/make-yaml-redirector@main | |
| with: | |
| variant: archive | |
| failoverserver: "${{ env.failoverserver }}" | |
| port: 8082 | |
| geodb: "${{ env.GEODB }}" | |
| asndb: "${{ env.ASNDB }}" | |
| dl_map: "${{ env.DL_MAP }}" | |
| certDataPath: "${{ env.CERTPATH }}" | |
| reloadKey: ${{ env.reloadKey }} | |
| netbox: ${{ secrets.NETBOX_TOKEN }} | |
| netboxapi: ${{ secrets.NETBOX_API }} | |
| - name: Download All Artifacts | |
| uses: actions/download-artifact@v8 | |
| with: | |
| path: status | |
| pattern: cache* | |
| merge-multiple: true | |
| - name: "Grep only those that are in sync" | |
| run: | | |
| echo "# Not in sync" >> $GITHUB_STEP_SUMMARY | |
| grep not_in_sync status/* | cut -d":" -f1 | xargs awk 'FNR==2{print}' >> $GITHUB_STEP_SUMMARY | |
| echo "# Timeouts" >> $GITHUB_STEP_SUMMARY | |
| grep timeout status/* | cut -d":" -f1 | xargs awk 'FNR==2{print}' >> $GITHUB_STEP_SUMMARY | |
| echo "failoverserver=$(grep true status/* | cut -d":" -f1 | cut -d"/" -f2 | sed ':a; N; s/\n/ /; ta') " >> $GITHUB_ENV | |
| echo "reloadKey=$(openssl rand -hex 16)" >> $GITHUB_ENV | |
| rm -rf status | |
| - name: Cache | |
| uses: armbian/actions/make-yaml-redirector@main | |
| with: | |
| variant: cache | |
| failoverserver: "${{ env.failoverserver }}" | |
| port: 8084 | |
| geodb: "${{ env.GEODB }}" | |
| asndb: "${{ env.ASNDB }}" | |
| dl_map: "${{ env.DL_MAP }}" | |
| certDataPath: "${{ env.CERTPATH }}" | |
| reloadKey: ${{ env.reloadKey }} | |
| netbox: ${{ secrets.NETBOX_TOKEN }} | |
| netboxapi: ${{ secrets.NETBOX_API }} | |
| Close: | |
| needs: [ download ] | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| path: armbian.github.io | |
| - uses: robinraju/[email protected] | |
| with: | |
| repository: "P3TERX/GeoLite.mmdb" | |
| fileName: "*.mmdb" | |
| latest: true | |
| - name: Download All Artifacts | |
| uses: actions/download-artifact@v8 | |
| 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: | | |
| set -euo pipefail | |
| cd armbian.github.io | |
| git config user.name "github-actions" | |
| git config user.email "[email protected]" | |
| git fetch origin data | |
| git checkout data | |
| mkdir -p data | |
| cp ${{ github.workspace }}/status/*.yaml data/ | |
| cp ${{ github.workspace }}/*.mmdb data/ | |
| git add data/ | |
| if ! git diff --cached --quiet; then | |
| git commit -m "Update Redirector YAML configuration" | |
| # Push with retry logic | |
| max_attempts=3 | |
| attempt=1 | |
| while [ $attempt -le $max_attempts ]; do | |
| if git push origin data; then | |
| echo "Successfully pushed to data branch" | |
| exit 0 | |
| fi | |
| # Pull with rebase to resolve conflicts | |
| echo "Push failed, attempting to pull and rebase..." >&2 | |
| if ! git pull --rebase origin data; then | |
| echo "Pull/rebase failed, will retry push..." >&2 | |
| fi | |
| attempt=$((attempt + 1)) | |
| done | |
| echo "Failed to push after $max_attempts attempts" >&2 | |
| exit 1 | |
| fi | |
| - uses: geekyeggo/delete-artifact@v6 | |
| with: | |
| name: | | |
| debs-* | |
| dl-* | |
| archive-* | |
| cache-* | |
| apt | |
| beta | |
| dl | |
| archive | |
| cache | |
| - name: "Run webindex update action" | |
| uses: peter-evans/repository-dispatch@v4 | |
| with: | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| event-type: "Data: Update download index" |