release.yml 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. name: Release
  2. on:
  3. push:
  4. tags:
  5. - '*'
  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. - os: ubuntu-latest
  19. target: x86_64-unknown-linux-musl
  20. exe: rathole
  21. - os: ubuntu-latest
  22. target: aarch64-unknown-linux-musl
  23. exe: rathole
  24. - os: ubuntu-latest
  25. target: arm-unknown-linux-musleabi
  26. exe: rathole
  27. - os: ubuntu-latest
  28. target: arm-unknown-linux-musleabihf
  29. exe: rathole
  30. - os: ubuntu-latest
  31. target: armv7-unknown-linux-musleabihf
  32. exe: rathole
  33. - os: ubuntu-latest
  34. target: mips-unknown-linux-gnu
  35. exe: rathole
  36. - os: ubuntu-latest
  37. target: mips-unknown-linux-musl
  38. exe: rathole
  39. - os: ubuntu-latest
  40. target: mipsel-unknown-linux-gnu
  41. exe: rathole
  42. - os: ubuntu-latest
  43. target: mipsel-unknown-linux-musl
  44. exe: rathole
  45. - os: ubuntu-latest
  46. target: mips64-unknown-linux-gnuabi64
  47. exe: rathole
  48. - os: ubuntu-latest
  49. target: mips64el-unknown-linux-gnuabi64
  50. exe: rathole
  51. - os: macos-latest
  52. target: x86_64-apple-darwin
  53. exe: rathole
  54. - os: windows-latest
  55. target: x86_64-pc-windows-msvc
  56. exe: rathole.exe
  57. steps:
  58. - uses: actions/checkout@v2
  59. - uses: actions-rs/toolchain@v1
  60. with:
  61. profile: minimal
  62. toolchain: stable
  63. - uses: Swatinem/rust-cache@v1
  64. with:
  65. key: ${{ matrix.target }}
  66. - name: Install cross
  67. run: cargo install --version 0.1.16 cross
  68. - name: Run tests
  69. run: cross test --release --target ${{ matrix.target }} --verbose
  70. - name: Build release
  71. run: cross build --release --target ${{ matrix.target }}
  72. - name: Strip
  73. if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest'
  74. continue-on-error: true
  75. run: strip target/${{ matrix.target }}/release/${{ matrix.exe }}
  76. - name: Run UPX
  77. # Upx may not support some platforms. Ignore the errors
  78. continue-on-error: true
  79. # Disable upx for mips. See https://github.com/upx/upx/issues/387
  80. if: matrix.os == 'ubuntu-latest' && !contains(matrix.target, 'mips')
  81. uses: crazy-max/ghaction-upx@v1
  82. with:
  83. version: v3.96
  84. files: target/${{ matrix.target }}/release/${{ matrix.exe }}
  85. args: -q --best --lzma
  86. - uses: actions/upload-artifact@v2
  87. with:
  88. name: rathole-${{ matrix.target }}
  89. path: target/${{ matrix.target }}/release/${{ matrix.exe }}
  90. - name: Zip Release
  91. uses: TheDoctor0/zip-release@0.6.1
  92. with:
  93. type: zip
  94. filename: rathole-${{ matrix.target }}.zip
  95. directory: target/${{ matrix.target }}/release/
  96. path: ${{ matrix.exe }}
  97. - name: Publish
  98. uses: softprops/action-gh-release@v1
  99. if: startsWith(github.ref, 'refs/tags/')
  100. with:
  101. files: target/${{ matrix.target }}/release/rathole-${{ matrix.target }}.zip
  102. generate_release_notes: true
  103. draft: true
  104. docker:
  105. name: Publish to Docker Hub
  106. runs-on: ubuntu-latest
  107. needs: release
  108. steps:
  109. - name: Set up Docker Buildx
  110. uses: docker/setup-buildx-action@v1
  111. - name: Login to DockerHub
  112. uses: docker/login-action@v1
  113. with:
  114. username: ${{ secrets.DOCKERHUB_USERNAME }}
  115. password: ${{ secrets.DOCKERHUB_TOKEN }}
  116. - name: Build and push
  117. id: docker_build
  118. uses: docker/build-push-action@v2
  119. with:
  120. push: true
  121. tags: rapiz1/rathole:latest, rapiz1/rathole:${{ github.ref_name }}
  122. publish-crate:
  123. name: Publish to crates.io
  124. runs-on: ubuntu-latest
  125. needs: release
  126. steps:
  127. - uses: actions/checkout@v2
  128. - uses: actions-rs/toolchain@v1
  129. with:
  130. profile: minimal
  131. toolchain: stable
  132. - name: Publish
  133. env:
  134. CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_API_TOKEN }}
  135. run: cargo publish