name: Build S-UI for Windows on: workflow_dispatch: release: types: [published] push: branches: - main tags: - "*" paths: - '.github/workflows/windows.yml' - 'frontend/**' - '**.go' - 'go.mod' - 'go.sum' - 'windows/**' jobs: build-windows: runs-on: windows-latest steps: - name: Checkout repository uses: actions/checkout@v6.0.2 with: submodules: recursive fetch-depth: 0 - name: Setup Go uses: actions/setup-go@v6 with: cache: false go-version-file: go.mod - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: '22' registry-url: 'https://registry.npmjs.org' - name: Install zip for Windows shell: powershell run: | # Install Chocolatey if not available if (!(Get-Command choco -ErrorAction SilentlyContinue)) { Set-ExecutionPolicy Bypass -Scope Process -Force [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072 iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1')) } # Install zip choco install zip -y - name: Build frontend shell: bash run: | cd frontend npm install npm run build cd .. mv frontend/dist web/html rm -fr frontend - name: Build s-ui shell: bash run: | export CGO_ENABLED=1 export GOOS=windows export GOARCH=amd64 echo "Building for Windows amd64" go version ### Build s-ui go build -ldflags="-w -s" -tags "with_quic,with_grpc,with_utls,with_acme,with_gvisor" -o sui.exe main.go file sui.exe mkdir s-ui-windows cp sui.exe s-ui-windows/ cp -r windows/* s-ui-windows/ - name: Package shell: bash run: | zip -r "s-ui-windows-amd64.zip" s-ui-windows - name: Upload files to Artifacts uses: actions/upload-artifact@v6 with: name: s-ui-windows-amd64 path: ./s-ui-windows-amd64.zip retention-days: 30 - name: Upload to Release uses: svenstaro/upload-release-action@v2 if: github.event_name == 'release' && github.event.action == 'published' with: repo_token: ${{ secrets.GITHUB_TOKEN }} tag: ${{ github.ref }} file: s-ui-windows-amd64.zip asset_name: s-ui-windows-amd64.zip prerelease: true overwrite: true build-windows-arm64: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v6.0.2 with: submodules: recursive fetch-depth: 0 - name: Setup Go uses: actions/setup-go@v6 with: cache: false go-version-file: go.mod - name: Setup Node.js uses: actions/setup-node@v6 with: node-version: '22' registry-url: 'https://registry.npmjs.org' - name: Build frontend run: | cd frontend npm install npm run build cd .. mv frontend/dist web/html rm -fr frontend - name: Build s-ui for ARM64 run: | export CGO_ENABLED=0 export GOOS=windows export GOARCH=arm64 echo "Building for Windows ARM64 (32-bit)" go version go env GOOS GOARCH ### Build s-ui without CGO for ARM64 go build -ldflags="-w -s" -tags "with_quic,with_grpc,with_utls,with_acme,with_gvisor" -o sui.exe main.go file sui.exe mkdir s-ui-windows cp sui.exe s-ui-windows/ cp -r windows/* s-ui-windows/ - name: Package ARM64 run: | zip -r "s-ui-windows-arm64.zip" s-ui-windows - name: Upload ARM64 files to Artifacts uses: actions/upload-artifact@v6 with: name: s-ui-windows-arm64 path: ./s-ui-windows-arm64.zip retention-days: 30 - name: Upload ARM64 to Release uses: svenstaro/upload-release-action@v2 if: | (github.event_name == 'release' && github.event.action == 'published') || (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')) with: repo_token: ${{ secrets.GITHUB_TOKEN }} tag: ${{ github.ref }} file: s-ui-windows-arm64.zip asset_name: s-ui-windows-arm64.zip prerelease: true overwrite: true