name: docker

on:
  push:
    branches:
      - master

jobs:
  build-push:
    runs-on: ubuntu-latest
    name: build-book (${{ github.ref_name }})
    permissions:
      contents: write
      packages: write

    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Collect Workflow Telemetry
        uses: runforesight/workflow-telemetry-action@v1

      - name: Clean up Docker environment
        run: |
          docker system prune --all --force --volumes

      - name: Additional disk space cleanup
        run: |
          sudo rm -rf /usr/share/dotnet
          sudo rm -rf /opt/ghc
          sudo rm -rf /usr/local/lib/android/sdk
          sudo apt-get clean
          sudo rm -rf /var/lib/apt/lists/*

      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3

      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3

      - name: Cache Docker layers
        uses: actions/cache@v4
        with:
          path: /tmp/.buildx-cache
          key: ${{ runner.os }}-buildx-${{ github.sha }}
          restore-keys: |
            ${{ runner.os }}-buildx-

      - name: Get package metadata
        id: info
        env:
          OWNER: ${{ github.repository_owner }}
        run: |
          Pkgname=$(grep -m1 -E '^Package: +' DESCRIPTION | sed -E 's/.*: +//')
          echo Pkgname=${Pkgname} >> "${GITHUB_ENV}"
          pkgname=${Pkgname,,}
          echo pkgname=${pkgname} >> "${GITHUB_ENV}"
          owner=${OWNER,,}
          echo owner=${owner} >> "${GITHUB_ENV}"
          echo pkgversion=$(grep -m1 -E '^Version: +' DESCRIPTION | sed -E 's/.*: +//') >> "${GITHUB_ENV}"

      - name: Log in to the Github Container registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ env.owner }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Get metadata for Docker
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: ghcr.io/${{ env.owner }}/${{ env.pkgname }}
          tags: |
            ${{ github.ref_name }}
            ${{ env.pkgversion }}
            type=raw,value=latest,enable=${{ github.ref == format('refs/heads/{0}', 'devel') }}

      - name: Install, build and check package in local Docker image
        id: docker
        uses: docker/build-push-action@v6
        with:
          context: .
          load: true
          cache-from: type=local,src=/tmp/.buildx-cache
          cache-to: type=local,dest=/tmp/.buildx-cache
          tags: ${{ steps.meta.outputs.tags }}

      - name: Push local Docker image to ghcr.io
        uses: docker/build-push-action@v4
        with:
          context: .
          push: true
          cache-from: type=local,src=/tmp/.buildx-cache
          cache-to: type=local,dest=/tmp/.buildx-cache
          tags: ${{ steps.meta.outputs.tags }}
