Xray browser header masquerading (#8981) #795
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: release Linux | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| release_tag: | |
| required: false | |
| type: string | |
| push: | |
| branches: | |
| - master | |
| permissions: | |
| contents: write | |
| env: | |
| OutputArch: "linux-64" | |
| OutputArchArm: "linux-arm64" | |
| OutputPath64: "${{ github.workspace }}/v2rayN/Release/linux-64" | |
| OutputPathArm64: "${{ github.workspace }}/v2rayN/Release/linux-arm64" | |
| jobs: | |
| build: | |
| strategy: | |
| matrix: | |
| configuration: [Release] | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6.0.2 | |
| with: | |
| submodules: 'recursive' | |
| fetch-depth: '0' | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v5.2.0 | |
| with: | |
| dotnet-version: '8.0.x' | |
| - name: Build | |
| run: | | |
| cd v2rayN | |
| dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-x64 -p:SelfContained=true -o "$OutputPath64" | |
| dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-arm64 -p:SelfContained=true -o "$OutputPathArm64" | |
| dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-x64 -p:SelfContained=true -p:PublishTrimmed=true -o "$OutputPath64" | |
| dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-arm64 -p:SelfContained=true -p:PublishTrimmed=true -o "$OutputPathArm64" | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v7.0.0 | |
| with: | |
| name: v2rayN-linux | |
| path: | | |
| ${{ github.workspace }}/v2rayN/Release/linux* | |
| # release zip archive | |
| - name: Package release zip archive | |
| if: github.event.inputs.release_tag != '' | |
| run: | | |
| chmod 755 package-release-zip.sh | |
| ./package-release-zip.sh "$OutputArch" "$OutputPath64" | |
| ./package-release-zip.sh "$OutputArchArm" "$OutputPathArm64" | |
| - name: Upload zip archive to release | |
| uses: svenstaro/upload-release-action@v2 | |
| if: github.event.inputs.release_tag != '' | |
| with: | |
| file: ${{ github.workspace }}/v2rayN*.zip | |
| tag: ${{ github.event.inputs.release_tag }} | |
| file_glob: true | |
| prerelease: true | |
| deb: | |
| needs: build | |
| if: | | |
| (github.event_name == 'workflow_dispatch' && github.event.inputs.release_tag != '') || | |
| (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')) | |
| runs-on: ubuntu-24.04 | |
| container: | |
| image: debian:13 | |
| env: | |
| RELEASE_TAG: ${{ github.event.inputs.release_tag != '' && github.event.inputs.release_tag || github.ref_name }} | |
| steps: | |
| - name: Prepare tools (Debian) | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| export DEBIAN_FRONTEND=noninteractive | |
| apt-get update | |
| apt-get install -y sudo git rsync findutils tar gzip unzip which curl jq wget file \ | |
| ca-certificates desktop-file-utils xdg-utils fakeroot dpkg-dev \ | |
| libc6 libgcc-s1 libstdc++6 zlib1g libicu-dev libssl-dev | |
| - name: Checkout repo (for scripts) | |
| uses: actions/checkout@v6.0.2 | |
| with: | |
| submodules: 'recursive' | |
| fetch-depth: '0' | |
| - name: Ensure script permissions | |
| run: chmod 755 package-debian.sh | |
| - name: Package DEB (Debian-family) | |
| run: ./package-debian.sh "${RELEASE_TAG}" --arch all | |
| - name: Collect DEBs into workspace | |
| run: | | |
| mkdir -p "$GITHUB_WORKSPACE/dist/deb" | |
| rsync -av "$HOME/debbuild/" "$GITHUB_WORKSPACE/dist/deb/" || true | |
| find "$GITHUB_WORKSPACE/dist/deb" -name "v2rayn_*_amd64.deb" \ | |
| -exec mv {} "$GITHUB_WORKSPACE/dist/deb/v2rayN-linux-64.deb" \; || true | |
| find "$GITHUB_WORKSPACE/dist/deb" -name "v2rayn_*_arm64.deb" \ | |
| -exec mv {} "$GITHUB_WORKSPACE/dist/deb/v2rayN-linux-arm64.deb" \; || true | |
| echo "==== Dist tree ====" | |
| ls -R "$GITHUB_WORKSPACE/dist/deb" || true | |
| - name: Upload DEB artifacts | |
| uses: actions/upload-artifact@v7.0.0 | |
| with: | |
| name: v2rayN-deb | |
| path: dist/deb/**/*.deb | |
| - name: Upload DEBs to release | |
| uses: svenstaro/upload-release-action@v2 | |
| with: | |
| file: dist/deb/**/*.deb | |
| tag: ${{ env.RELEASE_TAG }} | |
| file_glob: true | |
| prerelease: true | |
| rpm: | |
| needs: build | |
| if: | | |
| (github.event_name == 'workflow_dispatch' && github.event.inputs.release_tag != '') || | |
| (github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')) | |
| runs-on: ubuntu-24.04 | |
| container: | |
| image: registry.access.redhat.com/ubi10/ubi | |
| env: | |
| RELEASE_TAG: ${{ github.event.inputs.release_tag != '' && github.event.inputs.release_tag || github.ref_name }} | |
| steps: | |
| - name: Prepare tools (Red Hat) | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| . /etc/os-release | |
| EL_MAJOR="${VERSION_ID%%.*}" | |
| echo "EL_MAJOR=${EL_MAJOR}" | |
| dnf -y makecache || true | |
| command -v curl >/dev/null || dnf -y install curl ca-certificates | |
| ARCH="$(uname -m)" | |
| case "$ARCH" in x86_64|aarch64) ;; *) echo "Unsupported arch: $ARCH"; exit 1 ;; esac | |
| install_epel_from_dir() { | |
| local base="$1" rpm | |
| echo "Try: $base" | |
| rpm="$( | |
| { | |
| curl -fsSL "$base/Packages/" 2>/dev/null | |
| curl -fsSL "$base/Packages/e/" 2>/dev/null | sed 's|href="|href="e/|' | |
| } | | |
| sed -n 's/.*href="\([^"]*epel-release-[^"]*\.noarch\.rpm\)".*/\1/p' | | |
| sort -V | tail -n1 | |
| )" || true | |
| if [[ -n "$rpm" ]]; then | |
| dnf -y install "$base/Packages/$rpm" | |
| return 0 | |
| fi | |
| return 1 | |
| } | |
| FEDORA="https://dl.fedoraproject.org/pub/epel/epel-release-latest-${EL_MAJOR}.noarch.rpm" | |
| echo "Try Fedora: $FEDORA" | |
| if curl -fsSLI "$FEDORA" >/dev/null; then | |
| dnf -y install "$FEDORA" | |
| else | |
| ROCKY="https://dl.rockylinux.org/pub/rocky/${EL_MAJOR}/extras/${ARCH}/os" | |
| if install_epel_from_dir "$ROCKY"; then | |
| : | |
| else | |
| ALMA="https://repo.almalinux.org/almalinux/${EL_MAJOR}/extras/${ARCH}/os" | |
| if install_epel_from_dir "$ALMA"; then | |
| : | |
| else | |
| echo "EPEL bootstrap failed (Fedora/Rocky/Alma)" | |
| exit 1 | |
| fi | |
| fi | |
| fi | |
| dnf -y install sudo git rpm-build rpmdevtools dnf-plugins-core \ | |
| rsync findutils tar gzip unzip which | |
| dnf repolist | grep -i epel || true | |
| - name: Checkout repo (for scripts) | |
| uses: actions/checkout@v6.0.2 | |
| with: | |
| submodules: 'recursive' | |
| fetch-depth: '0' | |
| - name: Restore build artifacts | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: v2rayN-linux | |
| path: ${{ github.workspace }}/v2rayN/Release | |
| - name: Ensure script permissions | |
| run: chmod 755 package-rhel.sh | |
| - name: Package RPM (RHEL-family) | |
| run: ./package-rhel.sh "${RELEASE_TAG}" --arch all | |
| - name: Collect RPMs into workspace | |
| run: | | |
| mkdir -p "$GITHUB_WORKSPACE/dist/rpm" | |
| rsync -av "$HOME/rpmbuild/RPMS/" "$GITHUB_WORKSPACE/dist/rpm/" || true | |
| find "$GITHUB_WORKSPACE/dist/rpm" -name "v2rayN-*-1*.x86_64.rpm" -exec mv {} "$GITHUB_WORKSPACE/dist/rpm/v2rayN-linux-rhel-64.rpm" \; || true | |
| find "$GITHUB_WORKSPACE/dist/rpm" -name "v2rayN-*-1*.aarch64.rpm" -exec mv {} "$GITHUB_WORKSPACE/dist/rpm/v2rayN-linux-rhel-arm64.rpm" \; || true | |
| echo "==== Dist tree ====" | |
| ls -R "$GITHUB_WORKSPACE/dist/rpm" || true | |
| - name: Upload RPM artifacts | |
| uses: actions/upload-artifact@v7.0.0 | |
| with: | |
| name: v2rayN-rpm | |
| path: dist/rpm/**/*.rpm | |
| - name: Upload RPMs to release | |
| uses: svenstaro/upload-release-action@v2 | |
| with: | |
| file: dist/rpm/**/*.rpm | |
| tag: ${{ env.RELEASE_TAG }} | |
| file_glob: true | |
| prerelease: true |