drm_hwcomposer: CI: Use fdo ci-templates

Currently a customized container is built every time that the CI pipeline
runs. Instead, use the freedesktop ci-templates to save and re-use the
customized container in the drm_hwcomposer container registry.

Signed-off-by: Deborah Brouwer <deborah.brouwer@collabora.com>
diff --git a/.ci/container/.gitlab-ci.yml b/.ci/container/.gitlab-ci.yml
new file mode 100644
index 0000000..85024f8
--- /dev/null
+++ b/.ci/container/.gitlab-ci.yml
@@ -0,0 +1,37 @@
+
+.incorporate-templates-commit:
+  variables:
+    FDO_DISTRIBUTION_TAG: "${HWC_TAG}--${CI_TEMPLATES_COMMIT}"
+
+.container:
+  stage: container
+  extends:
+    - .incorporate-templates-commit
+  variables:
+    FDO_REPO_SUFFIX: $CI_JOB_NAME
+    # no need to pull the whole repo to build the container image
+    GIT_STRATEGY: none
+
+ubuntu/x86_64_hwc:
+  extends:
+    - .fdo.container-build@ubuntu
+    - .container
+  variables:
+    FDO_DISTRIBUTION_VERSION: "24.10"
+    FDO_DISTRIBUTION_EXEC: 'bash .ci/container/ubuntu/x86_64_aospless.sh'
+    HWC_TAG: $UBUNTU_HWC_TAG
+
+.set-image:
+  extends:
+    - .incorporate-templates-commit
+  image: "$CI_REGISTRY_IMAGE/${HWC_IMAGE}:${FDO_DISTRIBUTION_TAG}"
+
+.use-ubuntu/x86_64_hwc:
+  extends:
+    - .fdo.container-build@ubuntu
+    - .set-image
+  variables:
+    HWC_TAG: $UBUNTU_HWC_TAG
+    HWC_IMAGE: $UBUNTU_HWC_IMAGE
+  needs:
+    - ubuntu/x86_64_hwc
diff --git a/.ci/container/ubuntu/x86_64_aospless.sh b/.ci/container/ubuntu/x86_64_aospless.sh
new file mode 100644
index 0000000..9b6e49d
--- /dev/null
+++ b/.ci/container/ubuntu/x86_64_aospless.sh
@@ -0,0 +1,52 @@
+#!/usr/bin/env bash
+
+# For any changes to this file to take effect, the UBUNTU_HWC_TAG has
+# to be bumped to generate a new image.
+
+set -ex
+
+DEPS=(
+    clang
+    llvm
+    clang-19
+    clang-tidy-19
+    clang-format-19
+    ca-certificates
+    git
+    libdrm-dev
+    blueprint-tools
+    libgtest-dev
+    make
+    python3
+    wget
+    sudo
+    rsync
+    lld
+    pkg-config
+    ninja-build
+    meson
+    python3-mako
+    python3-jinja2
+    python3-ply
+    python3-yaml
+    wget
+    gnupg
+    xz-utils
+)
+
+export DEBIAN_FRONTEND=noninteractive
+
+apt-get update
+apt-get upgrade -y
+
+apt-get install -y --no-remove --no-install-recommends "${DEPS[@]}"
+
+wget https://gitlab.freedesktop.org/-/project/5/uploads/cafa930dad28acf7ee44d50101d5e8f0/aospless_drm_hwcomposer_arm64.tar.xz
+
+sha256sum aospless_drm_hwcomposer_arm64.tar.xz
+if echo f792b1140861112f80c8a3a22e1af8e3eccf4910fe4449705e62d2032b713bf9 aospless_drm_hwcomposer_arm64.tar.xz | sha256sum --check; then
+    tar --no-same-owner -xf aospless_drm_hwcomposer_arm64.tar.xz -C /
+else
+    echo "Tar file check failed"
+    exit 1
+fi
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 3690573..3d39f17 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,5 +1,3 @@
-image: ubuntu:24.10
-
 workflow:
   rules:
     - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
@@ -7,51 +5,50 @@
 
 variables:
   DEBIAN_FRONTEND: noninteractive
+  CI_TEMPLATES_COMMIT: &ci-templates-commit e195d80f35b45cc73668be3767b923fd76c70ed5
+  FDO_UPSTREAM_REPO: "drm-hwcomposer/drm-hwcomposer"
+  UBUNTU_HWC_IMAGE: "ubuntu/x86_64_hwc"
+  UBUNTU_HWC_TAG: "20250218_hwc"
 
-before_script:
-  - apt-get --quiet update --yes >/dev/null
-  - apt-get --quiet install --yes clang-19 clang-tidy-19 clang-format-19 git libdrm-dev blueprint-tools libgtest-dev make >/dev/null
-  - apt-get --quiet install --yes clang llvm make python3 wget sudo rsync lld pkg-config ninja-build meson >/dev/null
-  - apt-get --quiet install --yes python3-mako python3-jinja2 python3-ply python3-yaml >/dev/null
+include:
+  - project: 'freedesktop/ci-templates'
+    ref: *ci-templates-commit
+    file:
+      - '/templates/ubuntu.yml'
+  - local: '.ci/container/.gitlab-ci.yml'
 
 stages:
+  - container
   - build
   - tidy
   - style
 
 build:
   stage: build
+  extends:
+    .use-ubuntu/x86_64_hwc
   script:
-    - mkdir -p install/arm64
-    - cd ..
-    - rm -f aospless_drm_hwcomposer_arm64.tar.xz
-    - rm -rf aospless/*
-    - wget https://gitlab.freedesktop.org/-/project/5/uploads/cafa930dad28acf7ee44d50101d5e8f0/aospless_drm_hwcomposer_arm64.tar.xz
-    - tar xf aospless_drm_hwcomposer_arm64.tar.xz
-    - rm -rf aospless/src
-    - ln -s ../drm-hwcomposer/ aospless/src
-    - make -C ./aospless install
-    - cp -r aospless/install/* drm-hwcomposer/install/arm64
-    - ls drm-hwcomposer/install/arm64
-
+    - ln -s "${CI_PROJECT_DIR}" "/aospless/src"
+    - make -C /aospless install
+    - mkdir -p "${CI_PROJECT_DIR}/install/arm64"
+    - cp -r /aospless/install/* "${CI_PROJECT_DIR}/install/arm64"
   artifacts:
     paths:
-      - install/
+      - "${CI_PROJECT_DIR}/install/arm64"
     expire_in: 1 week
 
 tidy:
   stage: tidy
+  extends:
+    .use-ubuntu/x86_64_hwc
   script:
-    - cd ..
-    - rm -f aospless_drm_hwcomposer_arm64.tar.xz
-    - rm -rf aospless/*
-    - wget https://gitlab.freedesktop.org/-/project/5/uploads/cafa930dad28acf7ee44d50101d5e8f0/aospless_drm_hwcomposer_arm64.tar.xz
-    - tar xf aospless_drm_hwcomposer_arm64.tar.xz
-    - cd -
-    - make -j$(nproc) -k -f .ci/Makefile
+    - cp -r /aospless ../
+    - make -j$(nproc) -k -f "${CI_PROJECT_DIR}/.ci/Makefile"
 
 checkstyle:
   stage: style
+  extends:
+    .use-ubuntu/x86_64_hwc
   script: "./.ci/.gitlab-ci-checkcommit.sh"
   artifacts:
     when: on_failure