From 394e117998dd3d560b9429d1f938fb8a658b5dfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=F0=90=B2=93=F0=90=B3=9B=F0=90=B3=AA=F0=90=B3=82?= =?UTF-8?q?=F0=90=B3=90=20=F0=90=B2=80=F0=90=B3=A2=F0=90=B3=A6=F0=90=B3=AB?= =?UTF-8?q?=F0=90=B3=A2=20=F0=90=B2=A5=F0=90=B3=94=F0=90=B3=9B=F0=90=B3=AA?= =?UTF-8?q?=F0=90=B3=8C=F0=90=B3=91=F0=90=B3=96=F0=90=B3=87?= <26771058+KobeArthurScofield@users.noreply.github.com> Date: Wed, 7 Jan 2026 20:59:23 +0800 Subject: [PATCH] GitHub Actions: Add wintun.dll into Windows zips; Workflow refinement (#5501) For https://github.com/XTLS/Xray-core/pull/5464 --- .github/workflows/release-win7.yml | 60 +++++++++++++---- .github/workflows/release.yml | 67 +++++++++++++++---- .github/workflows/scheduled-assets-update.yml | 66 +++++++++++++++++- 3 files changed, 164 insertions(+), 29 deletions(-) diff --git a/.github/workflows/release-win7.yml b/.github/workflows/release-win7.yml index 9f1a33d8..914beca3 100644 --- a/.github/workflows/release-win7.yml +++ b/.github/workflows/release-win7.yml @@ -18,6 +18,12 @@ jobs: path: resources key: xray-geodat- + - name: Restore Wintun Cache + uses: actions/cache/restore@v5 + with: + path: resources + key: xray-wintun- + - name: Check Assets Existence id: check-assets run: | @@ -34,6 +40,18 @@ jobs: break fi done + LIST=('amd64' 'x86') + for ARCHITECTURE in "${LIST[@]}" + do + echo -e "Checking wintun.dll for ${ARCHITECTURE}..." + if [ -s "./resources/wintun/bin/${ARCHITECTURE}/wintun.dll" ]; then + echo -e "wintun.dll for ${ARCHITECTURE} exists." + else + echo -e "wintun.dll for ${ARCHITECTURE} is missing." + echo "missing=true" >> $GITHUB_OUTPUT + break + fi + done - name: Sleep for 90 seconds if Assets Missing if: steps.check-assets.outputs.missing == 'true' @@ -95,8 +113,6 @@ jobs: COMMID=$(git describe --always --dirty) echo 'Building Xray for Windows 7...' go build -o build_assets/xray.exe -trimpath -buildvcs=false -gcflags="all=-l=4" -ldflags="-X github.com/xtls/xray-core/core.build=${COMMID} -s -w -buildid=" -v ./main - echo 'CreateObject("Wscript.Shell").Run "xray.exe -config config.json",0' > build_assets/xray_no_window.vbs - echo 'Start-Process -FilePath ".\xray.exe" -ArgumentList "-config .\config.json" -WindowStyle Hidden' > build_assets/xray_no_window.ps1 # The line below is for without running conhost.exe version. Commented for not being used. Provided for reference. # go build -o build_assets/wxray.exe -trimpath -buildvcs=false -gcflags="all=-l=4" -ldflags="-H windowsgui -X github.com/xtls/xray-core/core.build=${COMMID} -s -w -buildid=" -v ./main @@ -106,9 +122,29 @@ jobs: path: resources key: xray-geodat- + - name: Restore Wintun Cache + uses: actions/cache/restore@v5 + with: + path: resources + key: xray-wintun- + + - name: Add additional assets into package + run: | + mv -f resources/geo* build_assets/ + if [[ ${GOOS} == 'windows' ]]; then + echo 'CreateObject("Wscript.Shell").Run "xray.exe -config config.json",0' > build_assets/xray_no_window.vbs + echo 'Start-Process -FilePath ".\xray.exe" -ArgumentList "-config .\config.json" -WindowStyle Hidden' > build_assets/xray_no_window.ps1 + if [[ ${GOARCH} == 'amd64' ]]; then + mv resources/wintun/bin/amd64/wintun.dll build_assets/ + fi + if [[ ${GOARCH} == '386' ]]; then + mv resources/wintun/bin/x86/wintun.dll build_assets/ + fi + mv resources/wintun/LICENSE.txt build_assets/LICENSE-wintun.txt + fi + - name: Copy README.md & LICENSE run: | - mv -f resources/* build_assets cp ${GITHUB_WORKSPACE}/README.md ./build_assets/README.md cp ${GITHUB_WORKSPACE}/LICENSE ./build_assets/LICENSE @@ -127,17 +163,6 @@ jobs: openssl dgst -$METHOD $FILE | sed 's/([^)]*)//g' >>$DGST done - - name: Change the name - run: | - mv build_assets Xray-${{ env.ASSET_NAME }} - - - name: Upload files to Artifacts - uses: actions/upload-artifact@v6 - with: - name: Xray-${{ env.ASSET_NAME }} - path: | - ./Xray-${{ env.ASSET_NAME }}/* - - name: Upload binaries to release uses: svenstaro/upload-release-action@v2 if: github.event_name == 'release' @@ -146,3 +171,10 @@ jobs: file: ./Xray-${{ env.ASSET_NAME }}.zip* tag: ${{ github.ref }} file_glob: true + + - name: Upload files to Artifacts + uses: actions/upload-artifact@v6 + with: + name: Xray-${{ env.ASSET_NAME }} + path: | + ./build_assets/* diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8fe5cae7..a4fe5a60 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,6 +18,12 @@ jobs: path: resources key: xray-geodat- + - name: Restore Wintun Cache + uses: actions/cache/restore@v5 + with: + path: resources + key: xray-wintun- + - name: Check Assets Existence id: check-assets run: | @@ -34,6 +40,18 @@ jobs: break fi done + LIST=('amd64' 'x86' 'arm64' 'arm') + for ARCHITECTURE in "${LIST[@]}" + do + echo -e "Checking wintun.dll for ${ARCHITECTURE}..." + if [ -s "./resources/wintun/bin/${ARCHITECTURE}/wintun.dll" ]; then + echo -e "wintun.dll for ${ARCHITECTURE} exists." + else + echo -e "wintun.dll for ${ARCHITECTURE} is missing." + echo "missing=true" >> $GITHUB_OUTPUT + break + fi + done - name: Trigger Asset Update Workflow if Assets Missing if: steps.check-assets.outputs.missing == 'true' @@ -191,8 +209,6 @@ jobs: if [[ ${GOOS} == 'windows' ]]; then echo 'Building Xray for Windows...' go build -o build_assets/xray.exe -trimpath -buildvcs=false -gcflags="all=-l=4" -ldflags="-X github.com/xtls/xray-core/core.build=${COMMID} -s -w -buildid=" -v ./main - echo 'CreateObject("Wscript.Shell").Run "xray.exe -config config.json",0' > build_assets/xray_no_window.vbs - echo 'Start-Process -FilePath ".\xray.exe" -ArgumentList "-config .\config.json" -WindowStyle Hidden' > build_assets/xray_no_window.ps1 # The line below is for without running conhost.exe version. Commented for not being used. Provided for reference. # go build -o build_assets/wxray.exe -trimpath -buildvcs=false -gcflags="all=-l=4" -ldflags="-H windowsgui -X github.com/xtls/xray-core/core.build=${COMMID} -s -w -buildid=" -v ./main else @@ -212,9 +228,36 @@ jobs: path: resources key: xray-geodat- + - name: Restore Wintun Cache + if: matrix.goos == 'windows' + uses: actions/cache/restore@v5 + with: + path: resources + key: xray-wintun- + + - name: Add additional assets into package + run: | + mv -f resources/geo* build_assets/ + if [[ ${GOOS} == 'windows' ]]; then + echo 'CreateObject("Wscript.Shell").Run "xray.exe -config config.json",0' > build_assets/xray_no_window.vbs + echo 'Start-Process -FilePath ".\xray.exe" -ArgumentList "-config .\config.json" -WindowStyle Hidden' > build_assets/xray_no_window.ps1 + if [[ ${GOARCH} == 'amd64' ]]; then + mv resources/wintun/bin/amd64/wintun.dll build_assets/ + fi + if [[ ${GOARCH} == '386' ]]; then + mv resources/wintun/bin/x86/wintun.dll build_assets/ + fi + if [[ ${GOARCH} == 'arm64' ]]; then + mv resources/wintun/bin/arm64/wintun.dll build_assets/ + fi + if [[ ${GOARCH} == 'arm' ]]; then + mv resources/wintun/bin/arm/wintun.dll build_assets/ + fi + mv resources/wintun/LICENSE.txt build_assets/LICENSE-wintun.txt + fi + - name: Copy README.md & LICENSE run: | - mv -f resources/* build_assets cp ${GITHUB_WORKSPACE}/README.md ./build_assets/README.md cp ${GITHUB_WORKSPACE}/LICENSE ./build_assets/LICENSE @@ -233,17 +276,6 @@ jobs: openssl dgst -$METHOD $FILE | sed 's/([^)]*)//g' >>$DGST done - - name: Change the name - run: | - mv build_assets Xray-${{ env.ASSET_NAME }} - - - name: Upload files to Artifacts - uses: actions/upload-artifact@v6 - with: - name: Xray-${{ env.ASSET_NAME }} - path: | - ./Xray-${{ env.ASSET_NAME }}/* - - name: Upload binaries to release uses: svenstaro/upload-release-action@v2 if: github.event_name == 'release' @@ -252,3 +284,10 @@ jobs: file: ./Xray-${{ env.ASSET_NAME }}.zip* tag: ${{ github.ref }} file_glob: true + + - name: Upload files to Artifacts + uses: actions/upload-artifact@v6 + with: + name: Xray-${{ env.ASSET_NAME }} + path: | + ./build_assets/* diff --git a/.github/workflows/scheduled-assets-update.yml b/.github/workflows/scheduled-assets-update.yml index 24183528..2e5da622 100644 --- a/.github/workflows/scheduled-assets-update.yml +++ b/.github/workflows/scheduled-assets-update.yml @@ -4,6 +4,7 @@ name: Scheduled assets update # routine manner, for example: GeoIP/GeoSite. # Currently updating: # - Geodat (GeoIP/Geosite) +# - Wintun (wintun.dll) on: workflow_dispatch: @@ -21,7 +22,7 @@ on: jobs: geodat: - if: github.event.schedule == '30 22 * * *' || github.event_name == 'push'|| github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' + if: github.event.schedule == '30 22 * * *' || github.event_name == 'push' || github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest steps: - name: Restore Geodat Cache @@ -63,3 +64,66 @@ jobs: with: path: resources key: xray-geodat-${{ github.sha }}-${{ github.run_number }} + + wintun: + if: github.event.schedule == '30 22 * * *' || github.event_name == 'push' || github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' + runs-on: ubuntu-latest + steps: + - name: Restore Wintun Cache + uses: actions/cache/restore@v5 + with: + path: resources + key: xray-wintun- + + - name: Force downloading if run manually or on file update + if: github.event_name == 'workflow_dispatch' || github.event_name == 'push' + run: | + echo "FORCE_UPDATE=true" >> $GITHUB_ENV + + - name: Update Wintun + id: update + uses: nick-fields/retry@v3 + with: + timeout_minutes: 60 + retry_wait_seconds: 60 + max_attempts: 60 + command: | + [ -d 'resources' ] || mkdir resources + LIST=('amd64' 'x86' 'arm64' 'arm') + for ARCHITECTURE in "${LIST[@]}" + do + FILE_PATH="resources/wintun/bin/${ARCHITECTURE}/wintun.dll" + echo -e "Checking if wintun.dll for ${ARCHITECTURE} exists..." + if [ -s "./resources/wintun/bin/${ARCHITECTURE}/wintun.dll" ]; then + echo -e "wintun.dll for ${ARCHITECTURE} exists" + continue + else + echo -e "wintun.dll for ${ARCHITECTURE} is missing" + missing=true + fi + done + if [ -s "./resources/wintun/LICENSE.txt" ]; then + echo -e "LICENSE for Wintun exists" + else + echo -e "LICENSE for Wintun is missing" + missing=true + fi + if [[ -v FORCE_UPDATE ]]; then + missing=true + fi + if [[ "$missing" == true ]]; then + FILENAME=wintun.zip + DOWNLOAD_FILE=wintun-0.14.1.zip + echo -e "Downloading https://www.wintun.net/builds/${DOWNLOAD_FILE}..." + curl -L "https://www.wintun.net/builds/${DOWNLOAD_FILE}" -o "${FILENAME}" + echo -e "Unpacking wintun..." + unzip -u ${FILENAME} -d resources/ + echo "unhit=true" >> $GITHUB_OUTPUT + fi + + - name: Save Wintun Cache + uses: actions/cache/save@v5 + if: ${{ steps.update.outputs.unhit }} + with: + path: resources + key: xray-wintun-${{ github.sha }}-${{ github.run_number }}