| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325 |
- name: Release
- on:
- release:
- types: [prereleased]
- push:
- branches:
- - master
- - v*
- - dev*
- paths:
- - "**/*.go"
- - "go.mod"
- - "go.sum"
- - ".github/workflows/*.yml"
- pull_request:
- types: [opened, synchronize, reopened]
- paths:
- - "**/*.go"
- - "go.mod"
- - "go.sum"
- - ".github/workflows/*.yml"
- jobs:
- build:
- strategy:
- matrix:
- # Include amd64 on all platforms.
- goos: [windows, freebsd, openbsd, linux, dragonfly, darwin]
- goarch: [amd64, 386]
- exclude:
- # Exclude i386 on darwin and dragonfly.
- - goarch: 386
- goos: dragonfly
- - goarch: 386
- goos: darwin
- include:
- # BEGIN Linux ARM 5 6 7
- - goos: linux
- goarch: arm
- goarm: 7
- - goos: linux
- goarch: arm
- goarm: 6
- - goos: linux
- goarch: arm
- goarm: 5
- # END Linux ARM 5 6 7
- # BEGIN Windows ARM 7
- - goos: windows
- goarch: arm
- goarm: 7
- # END Windows ARM 7
- # BEGIN FreeBSD ARM 6 7
- - goos: freebsd
- goarch: arm
- goarm: 6
- - goos: freebsd
- goarch: arm
- goarm: 7
- # END FreeBSD ARM 6 7
- # BEGIN OpenBSD ARM 6 7
- - goos: openbsd
- goarch: arm
- goarm: 6
- - goos: openbsd
- goarch: arm
- goarm: 7
- # END OpenBSD ARM 6 7
- # BEGIN Other architectures
- - goos: darwin
- goarch: arm64
- - goos: linux
- goarch: arm64
- - goos: linux
- goarch: riscv64
- - goos: linux
- goarch: loong64
- - goos: windows
- goarch: arm64
- - goos: android
- goarch: arm64
- - goos: freebsd
- goarch: arm64
- - goos: openbsd
- goarch: arm64
- # BEGIN MIPS
- - goos: linux
- goarch: mips64
- - goos: linux
- goarch: mips64le
- - goos: linux
- goarch: mipsle
- - goos: linux
- goarch: mips
- # END MIPS
- # END Other architectures
- fail-fast: false
- runs-on: ubuntu-latest
- env:
- GOOS: ${{ matrix.goos }}
- GOARCH: ${{ matrix.goarch }}
- GOARM: ${{ matrix.goarm }}
- CGO_ENABLED: 0
- steps:
- - name: Checkout codebase
- uses: actions/checkout@v3
- with:
- fetch-depth: 0
- - name: Show workflow information
- id: get_filename
- run: |
- export _NAME=$(jq ".[\"$GOOS-$GOARCH$GOARM\"].friendlyName" -r < release/friendly-filenames.json)
- echo "GOOS: $GOOS, GOARCH: $GOARCH, GOARM: $GOARM, RELEASE_NAME: $_NAME"
- echo "ASSET_NAME=$_NAME" >> $GITHUB_OUTPUT
- echo "ASSET_NAME=$_NAME" >> $GITHUB_ENV
- - name: Set up Go
- uses: actions/setup-go@v4
- with:
- go-version: ^1.20
- - name: Get project dependencies
- run: go mod download
- - name: Build V2Ray
- run: |
- mkdir -p build_assets
- go build -v -o build_assets/v2ray -trimpath -ldflags "-s -w -buildid=" ./main
- - name: Rename Windows V2Ray
- if: matrix.goos == 'windows'
- run: |
- cd ./build_assets || exit 1
- mv v2ray v2ray.exe
- - name: Download geo files
- run: |
- wget -O release/config/geoip.dat "https://raw.githubusercontent.com/v2fly/geoip/release/geoip.dat"
- wget -O release/config/geoip-only-cn-private.dat "https://raw.githubusercontent.com/v2fly/geoip/release/geoip-only-cn-private.dat"
- wget -O release/config/geosite.dat "https://raw.githubusercontent.com/v2fly/domain-list-community/release/dlc.dat"
- - name: Prepare package
- run: cp -v ./release/config/*.* ./build_assets
- - name: Prepare package for Linux
- if: matrix.goos == 'linux'
- run: cp -rv ./release/config/systemd ./build_assets/
- - name: Create ZIP archive
- run: |
- pushd build_assets || exit 1
- zip -9vr ../v2ray-$ASSET_NAME.zip .
- popd || exit 1
- FILE=./v2ray-$ASSET_NAME.zip
- DGST=$FILE.dgst
- openssl dgst -md5 $FILE | sed 's/([^)]*)//g' >>$DGST
- openssl dgst -sha1 $FILE | sed 's/([^)]*)//g' >>$DGST
- openssl dgst -sha256 $FILE | sed 's/([^)]*)//g' >>$DGST
- openssl dgst -sha512 $FILE | sed 's/([^)]*)//g' >>$DGST
- - name: Upload ZIP file to Artifacts
- uses: actions/upload-artifact@v3
- with:
- name: v2ray-${{ steps.get_filename.outputs.ASSET_NAME }}.zip
- path: v2ray-${{ steps.get_filename.outputs.ASSET_NAME }}.zip
- - name: Upload files to GitHub release
- uses: svenstaro/upload-release-action@v2
- if: github.event_name == 'release'
- with:
- repo_token: ${{ secrets.GITHUB_TOKEN }}
- file_glob: true
- file: ./v2ray-${{ steps.get_filename.outputs.ASSET_NAME }}.zip*
- tag: ${{ github.ref }}
- signature:
- runs-on: ubuntu-latest
- needs: build
- steps:
- - name: Checkout codebase
- uses: actions/checkout@v3
- with:
- fetch-depth: 0
- - name: Set up Go
- uses: actions/setup-go@v4
- with:
- go-version: ^1.20
- - uses: actions/download-artifact@v3
- with:
- path: build_artifacts
- - name: Create extra package
- run: |
- pushd ./release/extra/
- zip -9vr ../../build_artifacts/v2ray-extra.zip .
- popd
- - name: Generate shasum
- run: |
- go get -v github.com/v2fly/V2BuildAssist/v2buildutil
- cd build_artifacts || exit 1
- mkdir .temp
- mv ./*/*.zip ./.temp
- rmdir ./*/
- mv ./.temp/* .
- ls -lah --recursive
- {
- go run github.com/v2fly/V2BuildAssist/v2buildutil gen version $(git describe --tags $(git rev-list --tags --max-count=1))
- go run github.com/v2fly/V2BuildAssist/v2buildutil gen project "v2fly"
- for zip in $(ls *.zip); do
- go run github.com/v2fly/V2BuildAssist/v2buildutil gen file ${zip}
- done
- } >Release.unsigned.unsorted
- go run github.com/v2fly/V2BuildAssist/v2buildutil gen sort < Release.unsigned.unsorted > Release.unsigned
- rm -f Release.unsigned.unsorted
- FILE=./Release.unsigned
- DGST=$FILE.dgst
- openssl dgst -md5 $FILE | sed 's/([^)]*)//g' >>$DGST
- openssl dgst -sha1 $FILE | sed 's/([^)]*)//g' >>$DGST
- openssl dgst -sha256 $FILE | sed 's/([^)]*)//g' >>$DGST
- openssl dgst -sha512 $FILE | sed 's/([^)]*)//g' >>$DGST
- - uses: actions/upload-artifact@v3
- with:
- name: Release.unsigned
- path: build_artifacts/Release.unsigned
- - uses: actions/upload-artifact@v3
- with:
- name: Release.unsigned.dgst
- path: build_artifacts/Release.unsigned.dgst
- - uses: actions/upload-artifact@v3
- with:
- name: v2ray-extra.zip
- path: build_artifacts/v2ray-extra.zip
- - name: Upload Release.unsigned related files
- uses: svenstaro/upload-release-action@v2
- if: github.event_name == 'release'
- with:
- repo_token: ${{ secrets.GITHUB_TOKEN }}
- file_glob: true
- file: build_artifacts/Release.unsigned*
- tag: ${{ github.ref }}
- - name: Upload extra package
- uses: svenstaro/upload-release-action@v2
- if: github.event_name == 'release'
- with:
- repo_token: ${{ secrets.GITHUB_TOKEN }}
- file_glob: true
- file: build_artifacts/v2ray-extra.zip
- tag: ${{ github.ref }}
- buildContainer:
- if: github.event_name == 'release'
- needs: signature
- strategy:
- fail-fast: false
- matrix:
- variant: [std, extra]
- arch:
- - v2Name: 32
- containerName: 386
- - v2Name: 64
- containerName: amd64
- - v2Name: arm32-v6
- containerName: arm/v6
- - v2Name: arm32-v7a
- containerName: arm/v7
- - v2Name: arm64-v8a
- containerName: arm64
- - v2Name: arm64-v8a
- containerName: arm64/v8
- name: Build And Push image
- runs-on: ubuntu-latest
- env:
- REGISTRY_USER: ${{ github.actor }}
- REGISTRY_PASSWORD: ${{ github.token }}
- IMAGE_REGISTRY: ghcr.io/${{ github.repository_owner }}
- RELEASE_REPO: ${{ github.repository }}
- steps:
- - uses: actions/checkout@v3
- - name: Log in to ghcr.io
- uses: redhat-actions/podman-login@v1
- with:
- username: ${{ env.REGISTRY_USER }}
- password: ${{ env.REGISTRY_PASSWORD }}
- registry: ${{ env.IMAGE_REGISTRY }}
- - name: Download Assets
- run: |
- bash ./release/container/downloadAssets.sh ${{ github.ref_name }} ${{ matrix.arch.v2Name }} ${{ matrix.arch.containerName }} ${{ matrix.variant }}
- - name: Buildah Action
- id: build-image
- uses: redhat-actions/buildah-build@v2
- with:
- image: v2ray
- tags: ${{ github.ref_name }}-${{ matrix.arch.v2Name }}-${{ matrix.variant }}
- containerfiles: |
- ./release/container/Containerfile
- build-args: |
- TARGETPLATFORM=${{ matrix.arch.containerName }}
- VARIANT=${{ matrix.variant }}
- archs: ${{ matrix.arch.containerName }}
- context: context/linux/${{ matrix.arch.containerName }}/${{ matrix.variant }}
- extra-args: |
- --squash
- --timestamp 0
- - name: Push To ghcr.io
- uses: redhat-actions/push-to-registry@v2
- with:
- image: ${{ steps.build-image.outputs.image }}
- tags: ${{ steps.build-image.outputs.tags }}
- registry: ${{ env.IMAGE_REGISTRY }}
|