mirror of https://github.com/XTLS/Xray-core
				
				
				
			Build: Use patched newer Go version to build Windows 7 assets (#4192)
https://github.com/XTLS/go-win7pull/4181/head
							parent
							
								
									4be32e99b2
								
							
						
					
					
						commit
						c8b17ad18d
					
				|  | @ -0,0 +1,166 @@ | |||
| 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: 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: Set up Go | ||||
|         uses: actions/setup-go@v5 | ||||
|         with: | ||||
|           go-version: stable | ||||
|           check-latest: true | ||||
| 
 | ||||
|       - name: Setup patched builder | ||||
|         run: | | ||||
|           GOSDK=$(go env GOROOT) | ||||
|           curl -O -L https://github.com/XTLS/go-win7/releases/latest/download/go-for-win7-linux-amd64.zip | ||||
|           rm -r $GOSDK/* | ||||
|           unzip ./go-for-win7-linux-amd64.zip -d $GOSDK | ||||
| 
 | ||||
|       - 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\).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 | ||||
|  | @ -78,9 +78,7 @@ jobs: | |||
|         # Include amd64 on all platforms. | ||||
|         goos: [windows, freebsd, openbsd, linux, darwin] | ||||
|         goarch: [amd64, 386] | ||||
|         gotoolchain: [""] | ||||
|         patch-assetname: [""] | ||||
| 
 | ||||
|         exclude: | ||||
|           # Exclude i386 on darwin | ||||
|           - goarch: 386 | ||||
|  | @ -155,16 +153,6 @@ jobs: | |||
|             goarch: arm | ||||
|             goarm: 7 | ||||
|           # END OPENBSD ARM | ||||
|           # BEGIN Windows 7 | ||||
|           - goos: windows | ||||
|             goarch: amd64 | ||||
|             gotoolchain: 1.21.4 | ||||
|             patch-assetname: win7-64 | ||||
|           - goos: windows | ||||
|             goarch: 386 | ||||
|             gotoolchain: 1.21.4 | ||||
|             patch-assetname: win7-32 | ||||
|           # END Windows 7 | ||||
|       fail-fast: false | ||||
| 
 | ||||
|     runs-on: ubuntu-latest | ||||
|  | @ -187,7 +175,7 @@ jobs: | |||
|       - name: Set up Go | ||||
|         uses: actions/setup-go@v5 | ||||
|         with: | ||||
|           go-version: ${{ matrix.gotoolchain || '1.23' }} | ||||
|           go-version-file: go.mod | ||||
|           check-latest: true | ||||
| 
 | ||||
|       - name: Get project dependencies | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ jobs: | |||
|       - name: Set up Go | ||||
|         uses: actions/setup-go@v5 | ||||
|         with: | ||||
|           go-version: '1.23' | ||||
|           go-version-file: go.mod | ||||
|           check-latest: true | ||||
|       - name: Restore Cache | ||||
|         uses: actions/cache/restore@v4 | ||||
|  |  | |||
|  | @ -5,6 +5,7 @@ import ( | |||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"reflect" | ||||
| 	"slices" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	cnet "github.com/xtls/xray-core/common/net" | ||||
|  | @ -31,9 +32,6 @@ func JSONMarshalWithoutEscape(t interface{}) ([]byte, error) { | |||
| } | ||||
| 
 | ||||
| func marshalTypedMessage(v *cserial.TypedMessage, ignoreNullValue bool, insertTypeInfo bool) interface{} { | ||||
| 	if v == nil { | ||||
| 		return nil | ||||
| 	} | ||||
| 	tmsg, err := v.GetInstance() | ||||
| 	if err != nil { | ||||
| 		return nil | ||||
|  | @ -194,29 +192,28 @@ func marshalKnownType(v interface{}, ignoreNullValue bool, insertTypeInfo bool) | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| var valueKinds = []reflect.Kind{ | ||||
| 	reflect.Bool, | ||||
| 	reflect.Int, | ||||
| 	reflect.Int8, | ||||
| 	reflect.Int16, | ||||
| 	reflect.Int32, | ||||
| 	reflect.Int64, | ||||
| 	reflect.Uint, | ||||
| 	reflect.Uint8, | ||||
| 	reflect.Uint16, | ||||
| 	reflect.Uint32, | ||||
| 	reflect.Uint64, | ||||
| 	reflect.Uintptr, | ||||
| 	reflect.Float32, | ||||
| 	reflect.Float64, | ||||
| 	reflect.Complex64, | ||||
| 	reflect.Complex128, | ||||
| 	reflect.String, | ||||
| } | ||||
| 
 | ||||
| func isValueKind(kind reflect.Kind) bool { | ||||
| 	switch kind { | ||||
| 	case reflect.Bool, | ||||
| 		reflect.Int, | ||||
| 		reflect.Int8, | ||||
| 		reflect.Int16, | ||||
| 		reflect.Int32, | ||||
| 		reflect.Int64, | ||||
| 		reflect.Uint, | ||||
| 		reflect.Uint8, | ||||
| 		reflect.Uint16, | ||||
| 		reflect.Uint32, | ||||
| 		reflect.Uint64, | ||||
| 		reflect.Uintptr, | ||||
| 		reflect.Float32, | ||||
| 		reflect.Float64, | ||||
| 		reflect.Complex64, | ||||
| 		reflect.Complex128, | ||||
| 		reflect.String: | ||||
| 		return true | ||||
| 	default: | ||||
| 		return false | ||||
| 	} | ||||
| 	return slices.Contains(valueKinds, kind) | ||||
| } | ||||
| 
 | ||||
| func marshalInterface(v interface{}, ignoreNullValue bool, insertTypeInfo bool) interface{} { | ||||
|  |  | |||
|  | @ -2,6 +2,7 @@ package core | |||
| 
 | ||||
| import ( | ||||
| 	"io" | ||||
| 	"slices" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"github.com/xtls/xray-core/common" | ||||
|  | @ -64,14 +65,11 @@ func GetMergedConfig(args cmdarg.Arg) (string, error) { | |||
| 	supported := []string{"json", "yaml", "toml"} | ||||
| 	for _, file := range args { | ||||
| 		format := getFormat(file) | ||||
| 		for _, s := range supported { | ||||
| 			if s == format { | ||||
| 				files = append(files, &ConfigSource{ | ||||
| 					Name:   file, | ||||
| 					Format: format, | ||||
| 				}) | ||||
| 				break | ||||
| 			} | ||||
| 		if slices.Contains(supported, format) { | ||||
| 			files = append(files, &ConfigSource{ | ||||
| 				Name:   file, | ||||
| 				Format: format, | ||||
| 			}) | ||||
| 		} | ||||
| 	} | ||||
| 	return ConfigMergedFormFiles(files) | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 𐲓𐳛𐳪𐳂𐳐 𐲀𐳢𐳦𐳫𐳢 𐲥𐳔𐳛𐳪𐳌𐳑𐳖𐳇
						𐲓𐳛𐳪𐳂𐳐 𐲀𐳢𐳦𐳫𐳢 𐲥𐳔𐳛𐳪𐳌𐳑𐳖𐳇