multiarch-build.yml 4.2 KB

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