|
|
@@ -0,0 +1,64 @@
|
|
|
+name: Timely assets update
|
|
|
+
|
|
|
+# NOTE: This Github Actions is required by other actions, for preparing other packaging assets in a
|
|
|
+# routine manner, for example: GeoIP/GeoSite.
|
|
|
+# Currently updating:
|
|
|
+# - Geodat (GeoIP/Geosite)
|
|
|
+
|
|
|
+on:
|
|
|
+ workflow_dispatch:
|
|
|
+ schedule:
|
|
|
+ # Update assets on every hour (xx:30)
|
|
|
+ - cron: '30 * * * *'
|
|
|
+ push:
|
|
|
+ # Prevent triggering update request storm
|
|
|
+ paths:
|
|
|
+ - ".github/workflows/hourly-prepare.yml"
|
|
|
+ pull_request:
|
|
|
+ # Prevent triggering update request storm
|
|
|
+ paths:
|
|
|
+ - ".github/workflows/hourly-prepare.yml"
|
|
|
+
|
|
|
+jobs:
|
|
|
+ geodat:
|
|
|
+ runs-on: ubuntu-latest
|
|
|
+ steps:
|
|
|
+ - name: Restore Geodat Cache
|
|
|
+ uses: actions/cache/restore@v4
|
|
|
+ with:
|
|
|
+ path: resources
|
|
|
+ key: xray-geodat-
|
|
|
+
|
|
|
+ - name: Update Geodat
|
|
|
+ id: update
|
|
|
+ uses: nick-fields/retry@v3
|
|
|
+ with:
|
|
|
+ timeout_minutes: 60
|
|
|
+ retry_wait_seconds: 60
|
|
|
+ max_attempts: 60
|
|
|
+ command: |
|
|
|
+ [ -d 'resources' ] || mkdir resources
|
|
|
+ LIST=('geoip geoip geoip' 'domain-list-community dlc geosite')
|
|
|
+ for i in "${LIST[@]}"
|
|
|
+ do
|
|
|
+ INFO=($(echo $i | awk 'BEGIN{FS=" ";OFS=" "} {print $1,$2,$3}'))
|
|
|
+ FILE_NAME="${INFO[2]}.dat"
|
|
|
+ echo -e "Verifying HASH key..."
|
|
|
+ HASH="$(curl -sL "https://raw.githubusercontent.com/v2fly/${INFO[0]}/release/${INFO[1]}.dat.sha256sum" | awk -F ' ' '{print $1}')"
|
|
|
+ if [ -s "./resources/${FILE_NAME}" ] && [ "$(sha256sum "./resources/${FILE_NAME}" | awk -F ' ' '{print $1}')" == "${HASH}" ]; then
|
|
|
+ continue
|
|
|
+ else
|
|
|
+ echo -e "Downloading https://raw.githubusercontent.com/v2fly/${INFO[0]}/release/${INFO[1]}.dat..."
|
|
|
+ curl -L "https://raw.githubusercontent.com/v2fly/${INFO[0]}/release/${INFO[1]}.dat" -o ./resources/${FILE_NAME}
|
|
|
+ echo -e "Verifying HASH key..."
|
|
|
+ [ "$(sha256sum "./resources/${FILE_NAME}" | awk -F ' ' '{print $1}')" == "${HASH}" ] || { echo -e "The HASH key of ${FILE_NAME} does not match cloud one."; exit 1; }
|
|
|
+ echo "unhit=true" >> $GITHUB_OUTPUT
|
|
|
+ fi
|
|
|
+ done
|
|
|
+
|
|
|
+ - name: Save Geodat Cache
|
|
|
+ uses: actions/cache/save@v4
|
|
|
+ if: ${{ steps.update.outputs.unhit }}
|
|
|
+ with:
|
|
|
+ path: resources
|
|
|
+ key: xray-geodat-${{ github.sha }}-${{ github.run_number }}
|