build-xray.yml 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. name: Build Xray-core
  2. on:
  3. workflow_dispatch:
  4. inputs:
  5. build_type:
  6. description: "选择构建类型"
  7. required: true
  8. default: "stable"
  9. type: choice
  10. options:
  11. - stable
  12. - pre-release
  13. release:
  14. types: [published]
  15. repositories: [XTLS/Xray-core]
  16. jobs:
  17. build-xray:
  18. runs-on: ubuntu-latest
  19. steps:
  20. - name: Check Out Repo
  21. uses: actions/checkout@v4
  22. # 自动触发时获取 release 版本号
  23. - name: Get Release Version (Auto Trigger)
  24. if: github.event_name == 'release'
  25. run: |
  26. echo "XRAY_VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
  27. echo "BUILD_TYPE=stable" >> $GITHUB_ENV
  28. # 手动触发时获取最新版本号
  29. - name: Get Latest Version (Manual Trigger)
  30. if: github.event_name == 'workflow_dispatch'
  31. run: |
  32. if [ "${{ inputs.build_type }}" == "stable" ]; then
  33. VERSION=$(curl -fsSL https://api.github.com/repos/XTLS/Xray-core/releases/latest | grep '"tag_name":' | head -n 1 | awk -F '"' '{print $4}' | sed 's/v//')
  34. echo "BUILD_TYPE=stable" >> $GITHUB_ENV
  35. else
  36. VERSION=$(curl -fsSL https://api.github.com/repos/XTLS/Xray-core/tags | grep '"name":' | head -n 1 | awk -F '"' '{print $4}' | sed 's/v//')
  37. echo "BUILD_TYPE=pre-release" >> $GITHUB_ENV
  38. fi
  39. echo "XRAY_VERSION=$VERSION" >> $GITHUB_ENV
  40. - name: Login to Docker Hub
  41. uses: docker/login-action@v3
  42. with:
  43. username: ${{ secrets.DOCKER_HUB_USERNAME }}
  44. password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
  45. - name: Login to GHCR
  46. uses: docker/login-action@v3
  47. with:
  48. registry: ghcr.io
  49. username: ${{ github.actor }}
  50. password: ${{ secrets.GITHUB_TOKEN }}
  51. # 稳定版构建
  52. - name: Build Stable Image
  53. if: env.BUILD_TYPE == 'stable'
  54. run: |
  55. docker build -f ./xray/Dockerfile.latest -t ${{ secrets.DOCKER_HUB_USERNAME }}/xray:latest ./xray
  56. docker tag ${{ secrets.DOCKER_HUB_USERNAME }}/xray:latest ${{ secrets.DOCKER_HUB_USERNAME }}/xray:${{ env.XRAY_VERSION }}
  57. docker push ${{ secrets.DOCKER_HUB_USERNAME }}/xray:latest
  58. docker push ${{ secrets.DOCKER_HUB_USERNAME }}/xray:${{ env.XRAY_VERSION }}
  59. docker tag ${{ secrets.DOCKER_HUB_USERNAME }}/xray:latest ghcr.io/${{ github.repository }}/xray:latest
  60. docker tag ${{ secrets.DOCKER_HUB_USERNAME }}/xray:latest ghcr.io/${{ github.repository }}/xray:${{ env.XRAY_VERSION }}
  61. docker push ghcr.io/${{ github.repository }}/xray:latest
  62. docker push ghcr.io/${{ github.repository }}/xray:${{ env.XRAY_VERSION }}
  63. # Pre-release 构建
  64. - name: Build Pre-release Image
  65. if: env.BUILD_TYPE == 'pre-release'
  66. run: |
  67. docker build -f ./xray/Dockerfile -t ${{ secrets.DOCKER_HUB_USERNAME }}/xray:${{ env.XRAY_VERSION }} ./xray
  68. docker push ${{ secrets.DOCKER_HUB_USERNAME }}/xray:${{ env.XRAY_VERSION }}
  69. docker tag ${{ secrets.DOCKER_HUB_USERNAME }}/xray:${{ env.XRAY_VERSION }} ghcr.io/${{ github.repository }}/xray:${{ env.XRAY_VERSION }}
  70. docker push ghcr.io/${{ github.repository }}/xray:${{ env.XRAY_VERSION }}