multiarch-build.yml 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. name: Build Release
  2. on:
  3. push:
  4. tags:
  5. - v*
  6. jobs:
  7. build-releases:
  8. strategy:
  9. matrix:
  10. arch:
  11. [
  12. "linux/amd64 x86_64",
  13. "linux/arm/v6 armv6h",
  14. "linux/arm/v7 armv7h",
  15. "linux/arm64 aarch64",
  16. ]
  17. name: Build ${{ matrix.arch }}
  18. runs-on: ubuntu-latest
  19. steps:
  20. - name: Checkout code
  21. uses: actions/checkout@v2
  22. - name: Set up QEMU
  23. uses: docker/setup-qemu-action@v1
  24. with:
  25. platforms: all
  26. - name: Set up Docker Buildx
  27. id: buildx
  28. uses: docker/setup-buildx-action@v1
  29. with:
  30. version: latest
  31. - name: Read info
  32. id: tags
  33. shell: bash
  34. run: |
  35. echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\/v/}
  36. echo ::set-output name=TAG::${GITHUB_REF/refs\/tags\//}
  37. arch="${{ matrix.arch }}"
  38. echo ::set-output name=PLATFORM::${arch%% *}
  39. echo ::set-output name=ARCH::${arch##* }
  40. - name: Build ${{ matrix.arch }} release
  41. run: |
  42. mkdir artifacts
  43. docker buildx build --platform ${{ steps.tags.outputs.platform }} \
  44. --build-arg VERSION=${{ steps.tags.outputs.version }} \
  45. --build-arg ARCH=${{ steps.tags.outputs.arch }} \
  46. --build-arg PREFIX="/usr" \
  47. -t yay:${{ steps.tags.outputs.arch }} . --load
  48. make docker-release ARCH=${{ steps.tags.outputs.arch }} VERSION=${{ steps.tags.outputs.version }} PREFIX="/usr"
  49. mv *.tar.gz artifacts
  50. - uses: actions/upload-artifact@v2
  51. with:
  52. name: yay_${{ steps.tags.outputs.arch }}
  53. path: artifacts
  54. create_release:
  55. name: Create release from this build
  56. needs: [build-releases]
  57. runs-on: ubuntu-latest
  58. steps:
  59. - name: Checkout
  60. uses: actions/checkout@v2
  61. with:
  62. fetch-depth: 0
  63. - name: Read info
  64. id: tags
  65. shell: bash
  66. run: |
  67. echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\/v/}
  68. echo ::set-output name=TAG::${GITHUB_REF/refs\/tags\//}
  69. - uses: actions/download-artifact@v2
  70. with:
  71. name: yay_x86_64
  72. - uses: actions/download-artifact@v2
  73. with:
  74. name: yay_armv7h
  75. - uses: actions/download-artifact@v2
  76. with:
  77. name: yay_armv6h
  78. - uses: actions/download-artifact@v2
  79. with:
  80. name: yay_aarch64
  81. - name: Create Release
  82. id: create_release
  83. uses: actions/create-release@master
  84. env:
  85. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  86. with:
  87. tag_name: ${{ steps.tags.outputs.tag }}
  88. release_name: ${{ steps.tags.outputs.tag }}
  89. draft: false
  90. prerelease: false
  91. - name: Upload x86_64 asset
  92. id: upload-release-asset-x86_64
  93. uses: actions/upload-release-asset@v1
  94. env:
  95. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  96. with:
  97. upload_url: ${{ steps.create_release.outputs.upload_url }}
  98. asset_path: ./yay_${{ steps.tags.outputs.version }}_x86_64.tar.gz
  99. asset_name: yay_${{ steps.tags.outputs.version }}_x86_64.tar.gz
  100. asset_content_type: application/tar+gzip
  101. - name: Upload armv7h asset
  102. id: upload-release-asset-armv7h
  103. uses: actions/upload-release-asset@v1
  104. env:
  105. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  106. with:
  107. upload_url: ${{ steps.create_release.outputs.upload_url }}
  108. asset_path: ./yay_${{ steps.tags.outputs.version }}_armv7h.tar.gz
  109. asset_name: yay_${{ steps.tags.outputs.version }}_armv7h.tar.gz
  110. asset_content_type: application/tar+gzip
  111. - name: Upload armv6h asset
  112. id: upload-release-asset-armv6h
  113. uses: actions/upload-release-asset@v1
  114. env:
  115. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  116. with:
  117. upload_url: ${{ steps.create_release.outputs.upload_url }}
  118. asset_path: ./yay_${{ steps.tags.outputs.version }}_armv6h.tar.gz
  119. asset_name: yay_${{ steps.tags.outputs.version }}_armv6h.tar.gz
  120. asset_content_type: application/tar+gzip
  121. - name: Upload aarch64 asset
  122. id: upload-release-asset-aarch64
  123. uses: actions/upload-release-asset@v1
  124. env:
  125. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  126. with:
  127. upload_url: ${{ steps.create_release.outputs.upload_url }}
  128. asset_path: ./yay_${{ steps.tags.outputs.version }}_aarch64.tar.gz
  129. asset_name: yay_${{ steps.tags.outputs.version }}_aarch64.tar.gz
  130. asset_content_type: application/tar+gzip
  131. - name: Release Notary Action
  132. uses: docker://aevea/release-notary:0.9.3
  133. env:
  134. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}