Files
prplos/.gitlab/docker.yml
Petr Štetiar 69bfed48a0 ci: fix wasting of runtime testing resources after failed builds
Currently we're wasting roughly about 3 minutes of precious testbed time
when the firmware build CI job fails, every time. Due to increased
testing, this is no longer acceptable waste of testing resources.

During the investigation it was found out, that this is happening due to
changes introduced in commit febd8b0032 (".gitlab: Only run tests when
TFTP_IMAGE_DOWNLOAD_URL is set"), feature which was mainly introduced to
allow testing of externally build firmware images inside SoftAtHome for
previous, pre-2024 contribution delivery workflow. This is no longer
being used.

So lets fix it, but removing of TFTP_IMAGE_DOWNLOAD_URL feature. If we
need this feature again, it should be implemented in a different way,
avoiding wasting of the testbed resources after failed build.

Additionally, we need to change `rules: - when: always` in testbed.yml,
as it would still make run the CI job, despite of the failed dependency,
resorting back to the default `on_success` when rules, where the job is
run only when no jobs in earlier stages fail.

Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
2025-05-15 12:45:03 +00:00

115 lines
4.9 KiB
YAML

.docker in docker:
tags:
- saas-linux-small-amd64
image: docker:26
services:
- docker:26-dind
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DESIGNATED_BRANCH'
- when: manual
allow_failure: true
variables:
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: "/certs"
.build Docker image:
stage: docker
extends: .docker in docker
script:
- export IMAGE_NAME="$(echo $CI_JOB_NAME | sed 's/build Docker image \(.*\)/\1/')"
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- docker build -t "$IMAGE_NAME" $DOCKER_BUILD_EXTRA_ARGS $DOCKER_DOCKERFILE_PATH
- docker tag "$IMAGE_NAME" "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$IMAGE_NAME:$CI_COMMIT_REF_SLUG"
- docker push "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$IMAGE_NAME:$CI_COMMIT_REF_SLUG"
.test Docker SDK image:
stage: docker SDK and IB test
extends: .docker in docker
script:
- export IMAGE_NAME="$(echo $CI_JOB_NAME | sed 's/test Docker image \(.*\)/\1/')"
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- docker pull "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$IMAGE_NAME:$CI_COMMIT_REF_SLUG"
- >
docker run "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$IMAGE_NAME:$CI_COMMIT_REF_SLUG" sh -c "
cd /home/builder &&
make defconfig &&
./scripts/feeds update base &&
./scripts/feeds install urngd &&
sync && sleep 1 &&
make -j $(nproc) package/urngd/compile V=s &&
sync && sleep 1 &&
find ./bin/packages -name urngd*.ipk | grep ^./bin/packages/.*urngd
"
.test Docker IB image:
stage: docker SDK and IB test
extends: .docker in docker
script:
- export IMAGE_NAME="$(echo $CI_JOB_NAME | sed 's/test Docker image \(.*\)/\1/')"
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- docker pull "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$IMAGE_NAME:$CI_COMMIT_REF_SLUG"
- >
docker run "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$IMAGE_NAME:$CI_COMMIT_REF_SLUG" sh -c "
cd /home/builder &&
make image PROFILE=\"$CI_IB_PROFILE\" PACKAGES=\"$CI_IB_PACKAGES\"
"
.deploy Docker image:
extends: .docker in docker
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DESIGNATED_BRANCH'
script:
- export IMAGE_NAME="$(echo $CI_JOB_NAME | sed 's/deploy Docker image \(.*\)/\1/')"
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- docker pull "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$IMAGE_NAME:$CI_COMMIT_REF_SLUG"
- docker tag "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$IMAGE_NAME:$CI_COMMIT_REF_SLUG" "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$IMAGE_NAME:latest"
- docker push "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$IMAGE_NAME:latest"
.build LCM container:
stage: docker IB LCM container
extends: .docker in docker
script:
- export IMAGE_NAME="$(echo $CI_JOB_NAME | sed 's/build \(.*\)/\1/')"
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- apk add bash
- bash .gitlab/docker/ib/lcm/scripts/build-push-lcm-containers.sh
.test LCM container:
stage: docker IB LCM container
extends: .docker in docker
script:
- export IMAGE_NAME="$(echo $CI_JOB_NAME | sed 's/test \(.*\)/\1/')"
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- >
set -xe ;
for version in 1 2; do
image_name="${IMAGE_NAME}-v$version"
docker pull "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$image_name:$CI_COMMIT_REF_SLUG"
docker run "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$image_name:$CI_COMMIT_REF_SLUG" cat /etc/container-version | grep $version
done
.deploy LCM container:
stage: docker IB LCM container
extends: .docker in docker
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DESIGNATED_BRANCH'
script:
- export IMAGE_NAME="$(echo $CI_JOB_NAME | sed 's/deploy \(.*\)/\1/')"
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
- >
for version in v1 v2; do
image_name="${IMAGE_NAME}-$version"
docker pull "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$image_name:$CI_COMMIT_REF_SLUG"
docker tag "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$image_name:$CI_COMMIT_REF_SLUG" "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$image_name:latest"
docker push "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$image_name:latest"
docker tag "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/$image_name:$CI_COMMIT_REF_SLUG" "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/${IMAGE_NAME}:$version"
docker push "$CI_REGISTRY_IMAGE/$CI_DESIGNATED_BRANCH_SLUG/${IMAGE_NAME}:$version"
done