dash-mpd-cli 0.2.32

Download media content from a DASH-MPEG or DASH-WebM MPD manifest.
# Build a Docker/Podman container with dash-mpd-cli and its external helper applications. We
# currently build for Linux/AMD64, Linux/aarch64, Linux/armv7 (32 bit) and Linux/riscv64.
#
# We build for the different architectures in parallel, or we run into the 360 minute workflow
# timeout.

name: Build container images/parallel

on: workflow_dispatch

env:
  REGISTRY_USER: ${{ github.actor }}
  REGISTRY_PASSWORD: ${{ github.token }}
  IMAGE_REGISTRY: ghcr.io/${{ github.repository_owner }}

jobs:
  create-manifest:
    runs-on: ubuntu-latest
    steps:
      - name: Create Podman manifest
        run: podman manifest create dash-mpd-cli
    
  build-amd64:
    needs: [create-manifest, build-riscv64]
    runs-on: ubuntu-latest
    steps:
      - name: Install qemu
        run: sudo apt-get update && sudo apt-get -y install qemu-user-static

      - name: Checkout sources
        uses: actions/checkout@v6

        # We use "buildah build" instead of "podman build", because we are seeing errors on the older
        # version of podman installed on the runners.
      - name: Build image/amd64
        run: buildah build -f etc/Containerfile_linux_amd64 --platform linux/amd64 --tag dash-mpd-cli-linux-amd64 --manifest dash-mpd-cli .

     
  build-aarch64:
    needs: [create-manifest, build-riscv64]
    runs-on: ubuntu-latest
    steps:
      - name: Install qemu
        run: sudo apt-get -y install qemu-user-static

      - name: Checkout sources
        uses: actions/checkout@v6

      - name: Build image/aarch64
        run: buildah build -f etc/Containerfile_linux_aarch64 --platform linux/arm64 --tag dash-mpd-cli-linux-aarch64 --manifest dash-mpd-cli .

  build-armv7:
    needs: [create-manifest, build-riscv64]
    runs-on: ubuntu-latest
    steps:
      - name: Install recent qemu build
        run: |
           sudo apt-get -y install qemu-user-static
           podman pull docker.io/hectorm/qemu-user-static
           podman create --name qemutmp docker.io/hectorm/qemu-user-static
           podman export qemutmp > /tmp/qemu-user-static.tar
           podman rm qemutmp
           mkdir -p /tmp/qemubin
           tar xf /tmp/qemu-user-static.tar -C /tmp/qemubin --wildcards "usr/bin/qemu-*"
           rm /tmp/qemu-user-static.tar
           sudo cp /tmp/qemubin/usr/bin/qemu* /usr/local/bin
           sudo rm /usr/libexec/qemu-binfmt/arm-binfmt-P
           sudo ln -s /usr/local/bin/qemu-arm-static /usr/libexec/qemu-binfmt/arm-binfmt-P

      - name: Checkout sources
        uses: actions/checkout@v6

      - name: Build image/armv7
        run: buildah build -f etc/Containerfile_linux_armv7 --platform linux/arm/v7 --tag dash-mpd-cli-linux-armv7 --manifest dash-mpd-cli .

  # We install a recent build of qemu-user-static binaries, because the version available in
  # ubuntu-latest (currently jammy), v6.2, doesn't work well with riscv64.
  # See https://hub.docker.com/r/hectorm/qemu-user-static
  # We first install qemu-user-static as a Ubuntu package to get the binfmt-misc settings, then
  # copy to /usr/local/bin, then update the binfmt-misc symlinks to point to the new binaries. We
  # can't overwrite the binaries in /usr/bin from within the container ("text file busy"). 
  build-riscv64:
    needs: create-manifest
    runs-on: ubuntu-latest
    steps:
      - name: Install recent qemu build
        run: |
           sudo apt-get install -y qemu-user-static
           podman pull docker.io/hectorm/qemu-user-static
           podman create --name qemutmp docker.io/hectorm/qemu-user-static
           podman export qemutmp > /tmp/qemu-user-static.tar
           podman rm qemutmp
           mkdir -p /tmp/qemubin
           tar xf /tmp/qemu-user-static.tar -C /tmp/qemubin --wildcards "usr/bin/qemu-*"
           rm /tmp/qemu-user-static.tar
           sudo cp /tmp/qemubin/usr/bin/qemu* /usr/local/bin
           sudo rm /usr/libexec/qemu-binfmt/riscv64-binfmt-P
           sudo ln -s /usr/local/bin/qemu-riscv64-static /usr/libexec/qemu-binfmt/riscv64-binfmt-P

      - name: Checkout sources
        uses: actions/checkout@v6

      - name: Build image/riscv64
        run: buildah build -f etc/Containerfile_linux_riscv64 --platform linux/riscv64 --tag dash-mpd-cli-linux-riscv64 --manifest dash-mpd-cli .


  push-image:
    needs: [build-riscv64, build-amd64, build-aarch64, build-armv7]
    runs-on: ubuntu-latest

    permissions:
      contents: read
      packages: write

    name: Push container to registry
    steps:
      - name: Log in to ghcr.io
        uses: redhat-actions/podman-login@v1
        with:
          username: ${{ env.REGISTRY_USER }}
          password: ${{ env.REGISTRY_PASSWORD }}
          registry: ${{ env.IMAGE_REGISTRY }}

      - name: Push container image
        id: push-to-registry
        uses: redhat-actions/push-to-registry@v2
        with:
          image: dash-mpd-cli
          tags: latest
          registry: ${{ env.IMAGE_REGISTRY }}