You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
2.8 KiB

  1. # ref: https://github.com/crazy-max/diun/blob/master/.github/workflows/build.yml
  2. name: Docker
  3. on: [push]
  4. jobs:
  5. build:
  6. runs-on: ubuntu-18.04
  7. steps:
  8. - name: Prepare
  9. id: prepare
  10. run: |
  11. if [[ $GITHUB_REF == refs/tags/* ]]; then
  12. echo ::set-output name=version::${GITHUB_REF#refs/tags/v}
  13. elif [[ $GITHUB_REF == refs/heads/master ]]; then
  14. echo ::set-output name=version::latest
  15. elif [[ $GITHUB_REF == refs/heads/* ]]; then
  16. echo ::set-output name=version::${GITHUB_REF#refs/heads/}
  17. else
  18. echo ::set-output name=version::snapshot
  19. fi
  20. echo ::set-output name=docker_platforms::linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/386
  21. echo ::set-output name=docker_image::${{ secrets.DOCKER_USERNAME }}/${{ github.event.repository.name }}
  22. # https://github.com/crazy-max/ghaction-docker-buildx
  23. - name: Set up Docker Buildx
  24. id: buildx
  25. uses: crazy-max/ghaction-docker-buildx@v1
  26. with:
  27. version: latest
  28. - name: Environment
  29. run: |
  30. echo home=$HOME
  31. echo git_ref=$GITHUB_REF
  32. echo git_sha=$GITHUB_SHA
  33. echo version=${{ steps.prepare.outputs.version }}
  34. echo image=${{ steps.prepare.outputs.docker_image }}
  35. echo platforms=${{ steps.prepare.outputs.docker_platforms }}
  36. echo avail_platforms=${{ steps.buildx.outputs.platforms }}
  37. # https://github.com/actions/checkout
  38. - name: Checkout
  39. uses: actions/checkout@v2
  40. - name: Docker Buildx (no push)
  41. run: |
  42. docker buildx bake \
  43. --set ${{ github.event.repository.name }}.platform=${{ steps.prepare.outputs.docker_platforms }} \
  44. --set ${{ github.event.repository.name }}.output=type=image,push=false \
  45. --set ${{ github.event.repository.name }}.tags="${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }}" \
  46. --file Dockerfile
  47. - name: Docker Login
  48. if: success()
  49. env:
  50. DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
  51. run: |
  52. echo "${DOCKER_PASSWORD}" | docker login --username "${{ secrets.DOCKER_USERNAME }}" --password-stdin
  53. - name: Docker Buildx (push)
  54. if: success()
  55. run: |
  56. docker buildx bake \
  57. --set ${{ github.event.repository.name }}.platform=${{ steps.prepare.outputs.docker_platforms }} \
  58. --set ${{ github.event.repository.name }}.output=type=image,push=true \
  59. --set ${{ github.event.repository.name }}.tags="${{ steps.prepare.outputs.docker_image }}:${{ steps.prepare.outputs.version }}" \
  60. --file docker-compose.yaml
  61. - name: Clear
  62. if: always()
  63. run: |
  64. rm -f ${HOME}/.docker/config.json