multiarch-build.yml 4.1 KB

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