name: Docker # Gitea Actions workflow: builds the Docker image and publishes it to the # Gitea Container Registry hosted on this Gitea instance. on: push: branches: - main - develop tags: - "v*.*.*" pull_request: branches: - main - develop jobs: build: runs-on: ubuntu-latest permissions: contents: read packages: write steps: # Derive the registry host from the Gitea instance URL (e.g. # https://gitea.example.com -> gitea.example.com). The Gitea Container # Registry is served from the instance root, so this works on any host. - name: Resolve registry host run: echo "REGISTRY=${GITHUB_SERVER_URL#*://}" >> "$GITHUB_ENV" - name: Checkout repository uses: actions/checkout@v4 # Set up BuildKit Docker container builder to be able to build # multi-platform images and export cache. - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 # Log into the Gitea Container Registry except on PR. # # NOTE: Gitea's automatic Actions token (secrets.GITHUB_TOKEN) is NOT # granted package scope, so it cannot push to the container registry. # Create a Gitea personal access token with the "write:package" scope # (Settings -> Applications -> Access Tokens) and add it as a repo/org # Actions secret named PACKAGES_TOKEN. Set PACKAGES_USER to the token # owner's username (defaults to the triggering actor). - name: Log into registry ${{ env.REGISTRY }} if: github.event_name != 'pull_request' uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ vars.PACKAGES_USER || github.actor }} password: ${{ secrets.PACKAGES_TOKEN }} # Extract metadata (tags, labels) for Docker. - name: Extract Docker metadata id: meta uses: docker/metadata-action@v5 with: images: ${{ env.REGISTRY }}/${{ github.repository }} # Build and push the Docker image with Buildx (don't push on PR). - name: Build and push Docker image id: build-and-push uses: docker/build-push-action@v5 with: context: . push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max platforms: linux/amd64