release.yml 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. name: Release
  2. on:
  3. push:
  4. branches: [main]
  5. workflow_dispatch:
  6. env:
  7. CARGO_TERM_COLOR: always
  8. jobs:
  9. release:
  10. name: Cross build for ${{ matrix.target }}
  11. runs-on: ${{ matrix.os }}
  12. strategy:
  13. matrix:
  14. include:
  15. - os: ubuntu-latest
  16. target: x86_64-unknown-linux-gnu
  17. exe: rathole
  18. cross: false
  19. - os: ubuntu-latest
  20. target: x86_64-unknown-linux-musl
  21. exe: rathole
  22. cross: false
  23. - os: ubuntu-latest
  24. target: aarch64-unknown-linux-musl
  25. exe: rathole
  26. cross: true
  27. - os: ubuntu-latest
  28. target: arm-unknown-linux-musleabi
  29. exe: rathole
  30. cross: true
  31. - os: ubuntu-latest
  32. target: arm-unknown-linux-musleabihf
  33. exe: rathole
  34. cross: true
  35. - os: ubuntu-latest
  36. target: armv7-unknown-linux-musleabihf
  37. exe: rathole
  38. cross: true
  39. - os: ubuntu-latest
  40. target: mips-unknown-linux-gnu
  41. exe: rathole
  42. cross: true
  43. - os: ubuntu-latest
  44. target: mips-unknown-linux-musl
  45. exe: rathole
  46. cross: true
  47. - os: ubuntu-latest
  48. target: mipsel-unknown-linux-gnu
  49. exe: rathole
  50. cross: true
  51. - os: ubuntu-latest
  52. target: mipsel-unknown-linux-musl
  53. exe: rathole
  54. cross: true
  55. - os: ubuntu-latest
  56. target: mips64-unknown-linux-gnuabi64
  57. exe: rathole
  58. cross: true
  59. - os: ubuntu-latest
  60. target: mips64el-unknown-linux-gnuabi64
  61. exe: rathole
  62. cross: true
  63. - os: macos-latest
  64. target: x86_64-apple-darwin
  65. exe: rathole
  66. cross: false
  67. - os: macos-latest
  68. target: aarch64-apple-darwin
  69. exe: rathole
  70. cross: false
  71. - os: windows-latest
  72. target: x86_64-pc-windows-msvc
  73. exe: rathole.exe
  74. cross: false
  75. steps:
  76. - uses: actions/checkout@v2
  77. - uses: actions-rust-lang/setup-rust-toolchain@v1
  78. - name: Install OpenSSL
  79. if: matrix.os == 'ubuntu-latest'
  80. run: sudo apt-get install pkg-config libssl-dev
  81. - name: Install OpenSSL
  82. if: matrix.os == 'macos-latest'
  83. run: brew install openssl@3
  84. # Native build
  85. - name: Install target
  86. if: matrix.cross == false
  87. run: rustup target add ${{ matrix.target }}
  88. - name: Run tests
  89. if: matrix.cross == false && matrix.target != 'aarch64-apple-darwin'
  90. run: cargo test --release --target ${{ matrix.target }} --verbose
  91. - name: Build release
  92. if: matrix.cross == false
  93. run: cargo build --release --target ${{ matrix.target }}
  94. # Cross build
  95. - name: Install cross
  96. if: matrix.cross
  97. run: cargo install --version 0.2.5 cross
  98. - name: Run tests
  99. if: matrix.cross
  100. run: cross test --release --target ${{ matrix.target }} --verbose --features embedded --no-default-features
  101. - name: Build release
  102. if: matrix.cross
  103. run: cross build --release --target ${{ matrix.target }} --features embedded --no-default-features
  104. - name: Run UPX
  105. # Upx may not support some platforms. Ignore the errors
  106. continue-on-error: true
  107. # Disable upx for mips. See https://github.com/upx/upx/issues/387
  108. if: matrix.os == 'ubuntu-latest' && !contains(matrix.target, 'mips')
  109. uses: crazy-max/ghaction-upx@v1
  110. with:
  111. version: v4.0.2
  112. files: target/${{ matrix.target }}/release/${{ matrix.exe }}
  113. args: -q --best --lzma
  114. - uses: actions/upload-artifact@v4
  115. with:
  116. name: rathole-${{ matrix.target }}
  117. path: target/${{ matrix.target }}/release/${{ matrix.exe }}
  118. - name: Zip Release
  119. uses: TheDoctor0/zip-release@0.6.1
  120. with:
  121. type: zip
  122. filename: rathole-${{ matrix.target }}.zip
  123. directory: target/${{ matrix.target }}/release/
  124. path: ${{ matrix.exe }}
  125. - name: Publish
  126. uses: softprops/action-gh-release@v1
  127. if: startsWith(github.ref, 'refs/tags/')
  128. with:
  129. files: target/${{ matrix.target }}/release/rathole-${{ matrix.target }}.zip
  130. generate_release_notes: true
  131. draft: true
  132. docker:
  133. name: Publish to Docker Hub
  134. if: startsWith(github.ref, 'refs/tags/')
  135. runs-on: ubuntu-latest
  136. needs: release
  137. steps:
  138. - name: Set up Docker Buildx
  139. uses: docker/setup-buildx-action@v1
  140. - name: Login to DockerHub
  141. uses: docker/login-action@v1
  142. with:
  143. username: ${{ secrets.DOCKERHUB_USERNAME }}
  144. password: ${{ secrets.DOCKERHUB_TOKEN }}
  145. - name: Build and push
  146. id: docker_build
  147. uses: docker/build-push-action@v2
  148. with:
  149. push: true
  150. platforms: linux/amd64, linux/arm64, linux/armhf, linux/armv7
  151. tags: rapiz1/rathole:latest, rapiz1/rathole:${{ github.ref_name }}
  152. publish-crate:
  153. name: Publish to crates.io
  154. if: startsWith(github.ref, 'refs/tags/')
  155. runs-on: ubuntu-latest
  156. needs: release
  157. steps:
  158. - uses: actions/checkout@v2
  159. - uses: actions-rust-lang/setup-rust-toolchain@v1
  160. - name: Publish
  161. env:
  162. CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_API_TOKEN }}
  163. run: cargo publish