multiarch-build.yml 4.2 KB

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