From c5f7fb68b5f634d4b7291c88ed48b786d3eba344 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: Sun, 22 Dec 2024 14:23:22 +0800 Subject: [PATCH] Add Windows 7 with patched Go --- .github/workflows/release-win7.yml | 189 +++++++++++++++++++++++++++++ 1 file changed, 189 insertions(+) create mode 100644 .github/workflows/release-win7.yml diff --git a/.github/workflows/release-win7.yml b/.github/workflows/release-win7.yml new file mode 100644 index 00000000..8313e2f1 --- /dev/null +++ b/.github/workflows/release-win7.yml @@ -0,0 +1,189 @@ +name: Build and Release for Windows 7 + +# NOTE: This Github Actions file depends on the Makefile. +# Building the correct package requires the correct binaries generated by the Makefile. To +# ensure the correct output, the Makefile must accept the appropriate input and compile the +# correct file with the correct name. If you need to modify this file, please ensure it won't +# disrupt the Makefile. + +on: + workflow_dispatch: + release: + types: [published] + push: + branches: + - main + paths: + - "**/*.go" + - "go.mod" + - "go.sum" + - ".github/workflows/release-win7.yml" + pull_request: + types: [opened, synchronize, reopened] + paths: + - "**/*.go" + - "go.mod" + - "go.sum" + - ".github/workflows/release-win7.yml" +jobs: + prepare: + runs-on: ubuntu-latest + steps: + - name: Restore 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 Cache + uses: actions/cache/save@v4 + if: ${{ steps.update.outputs.unhit }} + with: + path: resources + key: xray-geodat-${{ github.sha }}-${{ github.run_number }} + + build: + needs: prepare + permissions: + contents: write + strategy: + matrix: + goos: [""] + goarch: [""] + gotoolchain-ref: [""] + gotoolchain-branch: [""] + assetname: [""] + include: + # BEGIN Windows 7 + - goos: windows + goarch: amd64 + gotoolchain-ref: 'MetaCubeX/go' + gotoolchain-branch: release-branch.go1.23 + assetname: win7-64 + - goos: windows + goarch: 386 + gotoolchain-ref: 'MetaCubeX/go' + gotoolchain-branch: release-branch.go1.23 + assetname: win7-32 + # END Windows 7 + fail-fast: false + + runs-on: ubuntu-latest + env: + GOOS: ${{ matrix.goos }} + GOARCH: ${{ matrix.goarch }} + CGO_ENABLED: 0 + steps: + - name: Show workflow information + run: | + _NAME=${{ matrix.assetname }} + echo "GOOS: $GOOS, GOARCH: $GOARCH, RELEASE_NAME: $_NAME" + echo "ASSET_NAME=$_NAME" >> $GITHUB_ENV + + - name: Set up Go compiler + uses: actions/setup-go@v5 + with: + go-version: 'latest' + + - name: Prepare patched Go source directory + run: | + mkdir patched-go + cd patched-go + + - name: Download patched Go + uses: actions/checkout@v4 + with: + repository: ${{ matrix.gotoolchain-ref }} + ref: ${{ matrix.gotoolchain-branch }} + + - name: Build patched Go + run: | + cd src + ./all.bash + cd ../.. + + - name: Checkout codebase + uses: actions/checkout@v4 + + - name: Get project dependencies + run: go mod download + + - name: Build Xray + run: | + mkdir -p build_assets + make + find . -maxdepth 1 -type f -regex './\(wxray\|xray\|xray_softfloat\)\(\|.exe\)' -exec mv {} ./build_assets/ \; + + - name: Restore Cache + uses: actions/cache/restore@v4 + with: + path: resources + key: xray-geodat- + + - 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 + + - name: Create ZIP archive + if: github.event_name == 'release' + shell: bash + run: | + pushd build_assets || exit 1 + touch -mt $(date +%Y01010000) * + zip -9vr ../Xray-${{ env.ASSET_NAME }}.zip . + popd || exit 1 + FILE=./Xray-${{ env.ASSET_NAME }}.zip + DGST=$FILE.dgst + for METHOD in {"md5","sha1","sha256","sha512"} + do + 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@v4 + 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' + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ./Xray-${{ env.ASSET_NAME }}.zip* + tag: ${{ github.ref }} + file_glob: true