name: Build and Push Container Image on: push: branches: - main tags: - "v*" jobs: build-and-push: runs-on: orchestration-platform container: image: docker:27-cli steps: - name: Install tools run: | apk add --no-cache git - name: Checkout code run: | git clone --depth 1 --branch "${GITHUB_REF_NAME}" "${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}.git" . - name: Check Dockerfile run: | test -f Dockerfile || { echo "Dockerfile not found"; exit 1; } - name: Determine image metadata id: meta run: | REGISTRY_HOST=$(echo "${{ gitea.server_url }}" | sed 's|https\?://||; s|/.*$||') IMAGE="${REGISTRY_HOST}/${{ gitea.repository }}" if echo "${{ gitea.ref }}" | grep -q '^refs/tags/'; then TAG=$(echo "${{ gitea.ref }}" | sed 's|refs/tags/v\?||') EXTRA_TAG="" else TAG="latest" EXTRA_TAG="main-${{ gitea.sha }}" fi echo "registry_host=${REGISTRY_HOST}" >> "$GITHUB_OUTPUT" echo "image=${IMAGE}" >> "$GITHUB_OUTPUT" echo "tag=${TAG}" >> "$GITHUB_OUTPUT" echo "extra_tag=${EXTRA_TAG}" >> "$GITHUB_OUTPUT" - name: Login to Gitea registry run: | echo "${{ secrets.REGISTRY_TOKEN }}" | docker login \ "${{ steps.meta.outputs.registry_host }}" \ --username "${{ secrets.REGISTRY_USERNAME }}" \ --password-stdin - name: Build image run: | docker build \ --label "org.opencontainers.image.source=${{ gitea.server_url }}/${{ gitea.repository }}" \ --label "org.opencontainers.image.revision=${{ gitea.sha }}" \ -t "${{ steps.meta.outputs.image }}:${{ steps.meta.outputs.tag }}" \ . - name: Add trace tag if: ${{ steps.meta.outputs.extra_tag != '' }} run: | docker tag \ "${{ steps.meta.outputs.image }}:${{ steps.meta.outputs.tag }}" \ "${{ steps.meta.outputs.image }}:${{ steps.meta.outputs.extra_tag }}" - name: Push image run: | docker push "${{ steps.meta.outputs.image }}:${{ steps.meta.outputs.tag }}" if [ -n "${{ steps.meta.outputs.extra_tag }}" ]; then docker push "${{ steps.meta.outputs.image }}:${{ steps.meta.outputs.extra_tag }}" fi