name: Build and Push Container Image on: push: branches: - main tags: - "v*" jobs: build-and-push: runs-on: orchestration-platform container: image: docker:latest steps: - name: Install tools run: | apk add --no-cache git curl - name: Checkout code run: | git clone --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: | if echo "${{ gitea.ref }}" | grep -q "refs/tags/"; then TAG=$(echo "${{ gitea.ref }}" | sed 's|refs/tags/||') else TAG="latest" fi echo "tag=${TAG}" >> "$GITHUB_OUTPUT" - name: Build image id: build run: | REGISTRY_HOST=$(echo "${{ gitea.server_url }}" | sed 's|https\?://||') IMAGE="${REGISTRY_HOST}/${{ gitea.repository }}:${{ steps.meta.outputs.tag }}" docker build \ --label "org.opencontainers.image.source=${{ gitea.server_url }}/${{ gitea.repository }}" \ --label "org.opencontainers.image.revision=${{ gitea.sha }}" \ -t "${IMAGE}" \ . echo "registry_host=${REGISTRY_HOST}" >> "$GITHUB_OUTPUT" echo "image=${IMAGE}" >> "$GITHUB_OUTPUT" - name: Login to Gitea registry run: | REGISTRY_USERNAME="${{ secrets.REGISTRY_USERNAME }}" REGISTRY_TOKEN="${{ secrets.REGISTRY_TOKEN }}" if [ -z "${REGISTRY_TOKEN}" ]; then REGISTRY_TOKEN="${{ secrets.GITEA_TOKEN }}" fi if [ -z "${REGISTRY_TOKEN}" ]; then REGISTRY_TOKEN="${{ secrets.GITHUB_TOKEN }}" fi if [ -z "${REGISTRY_USERNAME}" ]; then REGISTRY_USERNAME="${{ gitea.actor }}" fi if [ -z "${REGISTRY_USERNAME}" ]; then echo "Registry username is missing. Set REGISTRY_USERNAME or run the workflow with a valid Gitea actor." exit 1 fi if [ -z "${REGISTRY_TOKEN}" ]; then echo "Registry token is missing. Set REGISTRY_TOKEN, GITEA_TOKEN, or enable the built-in GITHUB_TOKEN for this workflow." exit 1 fi echo "${REGISTRY_TOKEN}" | docker login \ "${{ steps.build.outputs.registry_host }}" \ --username "${REGISTRY_USERNAME}" \ --password-stdin - name: Push image run: | docker push "${{ steps.build.outputs.image }}"