name: Docker Build & Push (Template) on: workflow_call: inputs: image_name: required: true type: string image_tag: required: false type: string default: latest dockerfile: required: false type: string default: Dockerfile context: required: false type: string default: . outputs: image: description: Fully-qualified image reference pushed to Docker Hub value: ${{ jobs.build.outputs.image }} jobs: build: runs-on: ubuntu-latest container: image: catthehacker/ubuntu:act-latest outputs: image: ${{ steps.push.outputs.image }} steps: - uses: actions/checkout@v4 - name: Build Docker image run: | docker build \ -t "${{ inputs.image_name }}:${{ inputs.image_tag }}" \ -f "${{ inputs.dockerfile }}" \ "${{ inputs.context }}" - name: Log in to Docker Hub uses: docker/login-action@v2 with: username: ${{ env.DOCKER_HUB_USERNAME }} password: ${{ env.DOCKER_HUB_ACCESS_TOKEN }} - name: Push Docker image to Docker Hub id: push shell: bash run: | set -euo pipefail REMOTE_IMAGE="${{ secrets.DOCKER_HUB_USERNAME }}/${{ inputs.image_name }}:${{ inputs.image_tag }}" docker tag "${{ inputs.image_name }}:${{ inputs.image_tag }}" "$REMOTE_IMAGE" docker push "$REMOTE_IMAGE" echo "image=$REMOTE_IMAGE" >> "$GITHUB_OUTPUT"