build-docker.yml 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. name: Docker
  2. on:
  3. push:
  4. paths-ignore:
  5. - "README.md"
  6. branches:
  7. - master
  8. concurrency:
  9. group: docker-publish-${{ github.ref }}
  10. cancel-in-progress: true
  11. env:
  12. IMAGE: zedeus/nitter
  13. jobs:
  14. tests:
  15. uses: ./.github/workflows/run-tests.yml
  16. secrets: inherit
  17. build:
  18. needs: [tests]
  19. strategy:
  20. fail-fast: false
  21. matrix:
  22. include:
  23. - runner: ubuntu-24.04
  24. platform: linux/amd64
  25. - runner: ubuntu-24.04-arm
  26. platform: linux/arm64
  27. runs-on: ${{ matrix.runner }}
  28. steps:
  29. - name: Prepare platform name
  30. run: echo "PLATFORM_PAIR=${platform//\//-}" >> "$GITHUB_ENV"
  31. env:
  32. platform: ${{ matrix.platform }}
  33. - uses: actions/checkout@v6
  34. - name: Set up Docker Buildx
  35. uses: docker/setup-buildx-action@v3
  36. with:
  37. version: latest
  38. - name: Login to DockerHub
  39. uses: docker/login-action@v3
  40. with:
  41. username: ${{ secrets.DOCKER_USERNAME }}
  42. password: ${{ secrets.DOCKER_PASSWORD }}
  43. - name: Build and push by digest
  44. id: build
  45. uses: docker/build-push-action@v6
  46. with:
  47. context: .
  48. file: ./Dockerfile
  49. platforms: ${{ matrix.platform }}
  50. outputs: type=image,name=${{ env.IMAGE }},push-by-digest=true,name-canonical=true,push=true
  51. provenance: false
  52. sbom: false
  53. - name: Export digest
  54. run: |
  55. mkdir -p "${{ runner.temp }}/digests"
  56. digest="${{ steps.build.outputs.digest }}"
  57. touch "${{ runner.temp }}/digests/${digest#sha256:}"
  58. - name: Upload digest
  59. uses: actions/upload-artifact@v4
  60. with:
  61. name: digests-${{ env.PLATFORM_PAIR }}
  62. path: ${{ runner.temp }}/digests/*
  63. if-no-files-found: error
  64. retention-days: 1
  65. # Combine the per-arch digests into one multi-arch manifest so that
  66. # `docker pull zedeus/nitter:latest` serves the right image on any CPU.
  67. merge:
  68. needs: [build]
  69. runs-on: ubuntu-24.04
  70. steps:
  71. - name: Download digests
  72. uses: actions/download-artifact@v4
  73. with:
  74. path: ${{ runner.temp }}/digests
  75. pattern: digests-*
  76. merge-multiple: true
  77. - name: Set up Docker Buildx
  78. uses: docker/setup-buildx-action@v3
  79. with:
  80. version: latest
  81. - name: Login to DockerHub
  82. uses: docker/login-action@v3
  83. with:
  84. username: ${{ secrets.DOCKER_USERNAME }}
  85. password: ${{ secrets.DOCKER_PASSWORD }}
  86. - name: Create manifest list and push
  87. working-directory: ${{ runner.temp }}/digests
  88. run: |
  89. docker buildx imagetools create \
  90. -t ${{ env.IMAGE }}:latest \
  91. -t ${{ env.IMAGE }}:latest-arm64 \
  92. -t ${{ env.IMAGE }}:${{ github.sha }} \
  93. $(printf '${{ env.IMAGE }}@sha256:%s ' *)
  94. - name: Inspect image
  95. run: docker buildx imagetools inspect ${{ env.IMAGE }}:${{ github.sha }}