builder-image.yml 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. name: Builder image
  2. on:
  3. schedule:
  4. - cron: "0 3 * * 1"
  5. push:
  6. paths:
  7. - "ci.Dockerfile"
  8. - "**/builder-image.yml"
  9. env:
  10. REGISTRY_IMAGE: jguer/yay-builder
  11. jobs:
  12. build:
  13. runs-on: ubuntu-latest
  14. strategy:
  15. fail-fast: true
  16. matrix:
  17. platform:
  18. - linux/amd64
  19. - linux/arm/v7
  20. - linux/arm64
  21. steps:
  22. - name: Checkout
  23. uses: actions/checkout@v3
  24. - name: Docker meta
  25. id: meta
  26. uses: docker/metadata-action@v4
  27. with:
  28. images: ${{ env.REGISTRY_IMAGE }}
  29. tags: |
  30. type=raw,value=latest
  31. - name: Set up QEMU
  32. uses: docker/setup-qemu-action@v2
  33. - name: Set up Docker Buildx
  34. uses: docker/setup-buildx-action@v2
  35. - name: Login to Docker Hub
  36. uses: docker/login-action@v2
  37. with:
  38. username: ${{ secrets.DOCKERHUB_USERNAME }}
  39. password: ${{ secrets.DOCKERHUB_TOKEN }}
  40. - name: Login to GitHub Container Registry
  41. uses: docker/login-action@v2
  42. with:
  43. registry: ghcr.io
  44. username: ${{ github.repository_owner }}
  45. password: ${{ secrets.GITHUB_TOKEN }}
  46. - name: Build and push by digest
  47. id: build
  48. uses: docker/build-push-action@v4
  49. with:
  50. context: .
  51. file: ci.Dockerfile
  52. platforms: ${{ matrix.platform }}
  53. labels: ${{ steps.meta.outputs.labels }}
  54. outputs: |
  55. type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true
  56. - name: Export digest
  57. run: |
  58. mkdir -p /tmp/digests
  59. digest="${{ steps.build.outputs.digest }}"
  60. touch "/tmp/digests/${digest#sha256:}"
  61. - name: Upload digest
  62. uses: actions/upload-artifact@v3
  63. with:
  64. name: digests
  65. path: /tmp/digests/*
  66. if-no-files-found: error
  67. retention-days: 1
  68. merge:
  69. runs-on: ubuntu-latest
  70. needs:
  71. - build
  72. steps:
  73. - name: Download digests
  74. uses: actions/download-artifact@v3
  75. with:
  76. name: digests
  77. path: /tmp/digests
  78. - name: Set up Docker Buildx
  79. uses: docker/setup-buildx-action@v2
  80. - name: Docker meta
  81. id: meta
  82. uses: docker/metadata-action@v4
  83. with:
  84. images: ${{ env.REGISTRY_IMAGE }}
  85. tags: |
  86. type=raw,value=latest
  87. - name: Login to Docker Hub
  88. uses: docker/login-action@v2
  89. with:
  90. username: ${{ secrets.DOCKERHUB_USERNAME }}
  91. password: ${{ secrets.DOCKERHUB_TOKEN }}
  92. - name: Login to GitHub Container Registry
  93. uses: docker/login-action@v2
  94. with:
  95. registry: ghcr.io
  96. username: ${{ github.repository_owner }}
  97. password: ${{ secrets.GITHUB_TOKEN }}
  98. - name: Create manifest list and push
  99. working-directory: /tmp/digests
  100. run: |
  101. docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \
  102. $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
  103. - name: Inspect image
  104. run: |
  105. docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }}