Files
TinfoilVibeServer/.gitea/workflows/build-and-push.yaml
T
ecenshu 97fc2dc872
Build & Push Docker image / build-and-push (push) Successful in 15m11s
ci / build_linux (push) Successful in 5m29s
Use sanitized github.ref
2025-11-13 19:44:36 +10:30

136 lines
5.8 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
name: Build & Push Docker image
on:
# Trigger on pushes to main or release branches, and on manual workflow dispatch
push:
branches:
- main
- 'release/**'
- 'beta/**'
workflow_dispatch:
jobs:
build-and-push:
runs-on: ubuntu-latest
environment: production
steps:
- name: Convert to lowercase
id: github_repository_to_lowercase
run: |
# Grab the value (you can also use `${{ github.ref }}`, `${{ secrets.MY_SECRET }}`, etc.)
raw_value="${{ github.repository }}"
# Convert to lower case
lower_value=$(echo "$raw_value" | tr '[:upper:]' '[:lower:]')
# Export it to the workflow environment
# echo "MY_LOWER=$lower_value" >> $GITHUB_ENV
# If you want to use it as an output of this step:
echo "lowercase=$lower_value" >> $GITHUB_OUTPUT
- name: Convert ref to buildx safe value
id: docker_tag_from_ref
shell: bash
run: |
# Grab the raw ref
REF="${{ github.ref }}"
# Strip the "refs/*/" prefix (refs/heads/, refs/tags/…)
TAG=${REF#refs/*/}
# Replace characters that Docker tags disallow
# * "/" → "-"
# * ":" → "-"
# * Any other nonalphanumeric / . / _ / - → "-"
TAG=${TAG//\//-}
TAG=${TAG//:/-}
TAG=${TAG//[^a-zA-Z0-9._-]/-}
# (Optional) force lowercase Docker tags are casesensitive,
# but many people prefer lowercase
TAG=${TAG,,}
# Export to the action's output
echo "docker-tag=${TAG}" >> $GITHUB_OUTPUT
# ------------------------------------------------------------------
# 1. Checkout repository
# ------------------------------------------------------------------
- name: Checkout source
uses: actions/checkout@v4
with:
fetch-depth: 0 # needed for git revparse and tag generation
# ------------------------------------------------------------------
# 2. Set up Docker Buildx (optional, but recommended for multiarch)
# ------------------------------------------------------------------
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
# ------------------------------------------------------------------
# 3. Log in to the Gitea container registry
# ------------------------------------------------------------------
- name: Log in to Gitea registry
uses: docker/login-action@v3
with:
registry: ${{ secrets.REGISTRY_HOST }} # e.g. registry.example.com
username: ${{ secrets.REGISTRY_USER }} # e.g. admin
password: ${{ secrets.REGISTRY_PASSWORD }} # e.g. <apitoken>
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
# ------------------------------------------------------------------
# 4. Build the Docker image
# ------------------------------------------------------------------
- name: Build image
id: build
uses: docker/build-push-action@v5
with:
context: .
file: TinfoilVibeServer/Dockerfile
# do not push yet
push: false
tags: |
${{ vars.REGISTRY_HOST }}/${{ steps.github_repository_to_lowercase.outputs.lowercase }}:${{ github.sha }}
${{ vars.REGISTRY_HOST }}/${{ steps.github_repository_to_lowercase.outputs.lowercase }}:${{ steps.docker_tag_from_ref.outputs.docker-tag }}
${{ vars.REGISTRY_HOST }}/${{ steps.github_repository_to_lowercase.outputs.lowercase }}:latest
build-args: |
# Add any build args here
# ARG_NAME=VALUE
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache
# ------------------------------------------------------------------
# 5. Push the image to the registry
# ------------------------------------------------------------------
- name: Push image
uses: docker/build-push-action@v5
with:
context: .
file: TinfoilVibeServer/Dockerfile
push: true
tags: |
${{ vars.REGISTRY_HOST }}/${{ steps.github_repository_to_lowercase.outputs.lowercase }}:${{ github.sha }}
${{ vars.REGISTRY_HOST }}/${{ steps.github_repository_to_lowercase.outputs.lowercase }}:${{ steps.docker_tag_from_ref.outputs.docker-tag }}
${{ vars.REGISTRY_HOST }}/${{ steps.github_repository_to_lowercase.outputs.lowercase }}:latest
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache
# ------------------------------------------------------------------
# 6. (Optional) Clean up local Docker cache
# ------------------------------------------------------------------
- name: Docker system prune
run: docker system prune -f
if: ${{ always() }}
# ------------------------------------------------------------------
# 7. Output useful info
# ------------------------------------------------------------------
- name: Show pushed image tags
run: |
echo "Pushed image tags:"
echo "- ${{ vars.REGISTRY_HOST }}/${{ steps.github_repository_to_lowercase.outputs.lowercase }}:${{ github.sha }}"
echo "- ${{ vars.REGISTRY_HOST }}/${{ steps.github_repository_to_lowercase.outputs.lowercase }}:${{ steps.docker_tag_from_ref.outputs.docker-tag }}"
echo "- ${{ vars.REGISTRY_HOST }}/${{ steps.github_repository_to_lowercase.outputs.lowercase }}:latest"