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 uses: step-security/change-string-case-action@v6 with: inputStr: ${{ github.repository }} # Replace with your variable # ------------------------------------------------------------------ # 1. Checkout repository # ------------------------------------------------------------------ - name: Checkout source uses: actions/checkout@v4 with: fetch-depth: 0 # needed for git rev‑parse and tag generation # ------------------------------------------------------------------ # 2. Set up Docker Buildx (optional, but recommended for multi‑arch) # ------------------------------------------------------------------ - 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. # ------------------------------------------------------------------ # 4. Build the Docker image # ------------------------------------------------------------------ - name: Build image id: build uses: docker/build-push-action@v5 with: context: . file: Dockerfile # do not push yet push: false tags: | ${{ secrets.REGISTRY_HOST }}/${{ steps.github_repository_to_lowercase.outputs.lowercase }}:${{ github.sha }} ${{ secrets.REGISTRY_HOST }}/${{ steps.github_repository_to_lowercase.outputs.lowercase }}:${{ github.ref_name }} ${{ secrets.REGISTRY_HOST }}/${{ github.repositorysteps.github_repository_to_lowercase.outputs.lowercase }}:latest build-args: | # Add any build args here # ARG_NAME=VALUE # ------------------------------------------------------------------ # 5. Push the image to the registry # ------------------------------------------------------------------ - name: Push image uses: docker/build-push-action@v5 with: context: . file: Dockerfile push: true tags: | ${{ secrets.REGISTRY_HOST }}/${{ github.repository }}:${{ github.sha }} ${{ secrets.REGISTRY_HOST }}/${{ github.repository }}:${{ github.ref_name }} ${{ secrets.REGISTRY_HOST }}/${{ github.repository }}:latest # ------------------------------------------------------------------ # 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 "- ${{ secrets.REGISTRY_HOST }}/${{ github.repository }}:${{ github.sha }}" echo "- ${{ secrets.REGISTRY_HOST }}/${{ github.repository }}:${{ github.ref_name }}" echo "- ${{ secrets.REGISTRY_HOST }}/${{ github.repository }}:latest"