name: Publish Docker Image on: workflow_call: secrets: ACTIONS_TOKEN: required: true GHCR_TOKEN: required: true inputs: release: required: true type: string registry: required: true type: string actions_username: required: true type: string ghcr_username: required: true type: string jobs: publish: name: Publish Docker Images runs-on: ubuntu-latest steps: - name: Update Docker configuration continue-on-error: true run: | mkdir -p /etc/default mkdir -p /etc/docker touch -a /etc/default/docker touch -a /etc/docker/daemon.json echo "DOCKER_OPTS=\"--insecure-registry ${{ inputs.registry }}\"" >> /etc/default/docker echo "{\"insecure-registries\": [\"${{ inputs.registry }}\"]}" > /etc/docker/daemon.json - name: Get repo name id: split run: echo "repo=${REPO##*/}" >> "$GITEA_OUTPUT" env: REPO: ${{ gitea.repository }} - name: Check out repository uses: actions/checkout@v4.2.2 with: fetch-depth: 0 ref: ${{ inputs.release }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to Gitea Container Registry uses: docker/login-action@v3 with: registry: ${{ inputs.registry }} username: ${{ inputs.actions_username }} password: ${{ secrets.ACTIONS_TOKEN }} - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ inputs.ghcr_username }} password: ${{ secrets.GHCR_TOKEN }} - name: Extract metadata (tags, labels) for Docker id: meta uses: docker/metadata-action@v5 with: tags: type=semver,pattern=v{{version}},value=${{ inputs.release }} images: | ghcr.io/${{ inputs.ghcr_username }}/${{ steps.split.outputs.repo }} ${{ inputs.registry }}/${{ gitea.repository }} - name: Print metadata run: | printf "Annotations:\n${{ steps.meta.outputs.annotations }}" echo "" printf "Labels:\n${{ steps.meta.outputs.labels }}" echo "" printf "Tags:\n${{ steps.meta.outputs.tags }}" - name: Build images uses: docker/build-push-action@v6 with: context: . push: false load: true annotations: ${{ steps.meta.outputs.annotations }} labels: ${{ steps.meta.outputs.labels }} tags: ${{ steps.meta.outputs.tags }} - name: Push images run: | strtags="${{ steps.meta.outputs.tags }}" readarray -t lines <<<"$strtags" for element in "${lines[@]}"; do docker push "$element"; done unset strtags lines