Skip to content

Build: Use patched newer Go version to build Windows 7 assets #2

Build: Use patched newer Go version to build Windows 7 assets

Build: Use patched newer Go version to build Windows 7 assets #2

Workflow file for this run

name: Build and Release for Windows 7
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: Set up Go compiler
uses: actions/setup-go@v5
with:
go-version: 'stable'
check-latest: true
- name: Download patched Go
uses: actions/checkout@v4
with:
# To change the repository of toolchail, change it here
repository: 'MetaCubeX/go'
ref: 'release-branch.go1.23'
- name: Build patched Go
run: |
cd ./src
. ./all.bash
cd ../
mkdir -p patched-go
rsync -a --exclude 'patched-go' ./ 'patched-go'
- name: Save patched builder
uses: actions/cache/save@v4
with:
path: patched-go
key: xray-patched-go-${{ github.sha }}-${{ github.run_number }}
- 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:
include:
# BEGIN Windows 7
- goos: windows
goarch: amd64
assetname: win7-64
- goos: windows
goarch: 386
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: ${{ matrix.goos }}, GOARCH: ${{ matrix.goarch }}, RELEASE_NAME: $_NAME"
echo "ASSET_NAME=$_NAME" >> $GITHUB_ENV
- name: Checkout codebase
uses: actions/checkout@v4
- name: Restore Go builder
uses: actions/cache/restore@v4
with:
path: patched-go
key: xray-patched-go-${{ github.sha }}-${{ github.run_number }}
- name: Download dependencies and build Xray
run: |
echo "Setup environment..."
export PATH=$PATH:$PWD/patched-go/bin
./patched-go/bin/go version
./patched-go/bin/go env -w GOPATH=$PWD
./patched-go/bin/go env -w GOROOT=$PWD/patched-go
echo "Download dependencies..."
./patched-go/bin/go mod download
echo "Build Xray..."
mkdir -p build_assets
./patched-go/bin/go clean -v -i $PWD
rm -f xray xray.exe wxray.exe xray_softfloat
./patched-go/bin/go build -o xray.exe -trimpath -ldflags "-s -w -buildid=" -v ./main
./patched-go/bin/go build -o wxray.exe -trimpath -ldflags "-H windowsgui -s -w -buildid=" -v ./main
echo "Build completed."
find . -maxdepth 1 -type f -regex './\(wxray\|xray\).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