name: "build and push image" inputs: dockerfile: description: "dockerfile to build" required: true image-name: description: "image name (without registry)" required: true username: required: false default: "" password: required: false default: "" outputs: branch: description: "Branch name for the PR" value: ${{ steps.branch.outputs.branch }} runs: using: "composite" steps: # GHCR login (using GITHUB_TOKEN - automatically available) - name: Login to GHCR uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ github.token }} - name: Set image version id: version shell: bash run: | if [[ "${{ github.event_name }}" == "pull_request" ]]; then echo "VERSION=${{ github.event.pull_request.head.sha }}" >> $GITHUB_OUTPUT elif [[ "${{ github.event_name }}" == "merge_group" ]]; then echo "VERSION=${GITHUB_SHA::8}" >> $GITHUB_OUTPUT else echo "VERSION=${GITHUB_SHA::8}" >> $GITHUB_OUTPUT fi - name: build shell: bash env: ZOMBIENET_IMAGE: "docker.io/pezkuwichain/zombienet:v1.3.105" IMAGE_TAG: ghcr.io/pezkuwichain/${{ inputs.image-name }} run: | docker build \ --build-arg VCS_REF="${GITHUB_SHA}" \ --build-arg BUILD_DATE="$(date -u '+%Y-%m-%dT%H:%M:%SZ')" \ --build-arg IMAGE_NAME="${{ inputs.image-name }}" \ --build-arg ZOMBIENET_IMAGE="${ZOMBIENET_IMAGE}" \ -t "${{ env.IMAGE_TAG }}:${{ steps.version.outputs.VERSION }}" \ -t "${{ env.IMAGE_TAG }}:latest" \ -f ${{ inputs.dockerfile }} \ . - name: push to GHCR shell: bash env: IMAGE_TAG: ghcr.io/pezkuwichain/${{ inputs.image-name }} run: | docker push "${{ env.IMAGE_TAG }}:${{ steps.version.outputs.VERSION }}" docker push "${{ env.IMAGE_TAG }}:latest" - name: login to dockerhub id: login # Only login if credentials are provided if: ${{ inputs.username != '' && inputs.password != '' }} uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # v3.5.0 with: username: ${{ inputs.username }} password: ${{ inputs.password }} - name: push to dockerhub shell: bash if: ${{ inputs.username != '' && inputs.password != '' }} env: GHCR_TAG: ghcr.io/pezkuwichain/${{ inputs.image-name }} DOCKERHUB_TAG: docker.io/pezkuwichain/${{ inputs.image-name }} run: | # Tag GHCR image for DockerHub docker tag "${{ env.GHCR_TAG }}:${{ steps.version.outputs.VERSION }}" "${{ env.DOCKERHUB_TAG }}:${{ steps.version.outputs.VERSION }}" docker tag "${{ env.GHCR_TAG }}:latest" "${{ env.DOCKERHUB_TAG }}:latest" # Push to DockerHub docker push "${{ env.DOCKERHUB_TAG }}:${{ steps.version.outputs.VERSION }}" docker push "${{ env.DOCKERHUB_TAG }}:latest"