Now that Alpine 3.24 is out and the issues with Python 3.14 are resolved, we can safely upgrade in CI. Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/8859>
141 lines
4.4 KiB
Django/Jinja
141 lines
4.4 KiB
Django/Jinja
image: registry.alpinelinux.org/img/alpine:3.24
|
|
stages:
|
|
- build
|
|
- hardware tests
|
|
|
|
variables:
|
|
CI_TRON_TEMPLATE_PROJECT: &ci-tron-template-project postmarketOS/ci-common
|
|
CI_TRON_JOB_TEMPLATE_PROJECT_URL: $CI_SERVER_URL/$CI_TRON_TEMPLATE_PROJECT
|
|
CI_TRON_JOB_TEMPLATE_COMMIT: &ci-tron-template-commit 1c70e34b7a610cda1d7f048f6b50ca9c10f52995
|
|
|
|
include:
|
|
- project: *ci-tron-template-project
|
|
ref: *ci-tron-template-commit
|
|
file: '/ci-tron/common.yml'
|
|
|
|
workflow:
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "parent_pipeline"
|
|
|
|
.build:
|
|
# Create jobs, but do not run them unless this is
|
|
# overriden in jobs that extend it
|
|
stage: build
|
|
interruptible: true
|
|
before_script:
|
|
# upgrade is mostly needed for "qemu" runners that run edge based on a VM
|
|
# The other build jobs run natively in docker on latest alpine stable and
|
|
# those should always have whatever we need
|
|
- apk upgrade -U
|
|
- .ci/lib/gitlab_prepare_ci.sh
|
|
after_script:
|
|
- cp -r /home/pmos/.local/var/pmbootstrap/packages/ packages/ || true
|
|
- mkdir -p keys
|
|
- cp /home/pmos/.local/var/pmbootstrap/config_apk_keys/pmos@local*.pub keys/ || true
|
|
- .ci/lib/move_logs.sh $CI_PROJECT_DIR
|
|
artifacts:
|
|
expire_in: 1 week
|
|
paths:
|
|
- packages/
|
|
- keys/
|
|
timeout: 10 h
|
|
|
|
build:
|
|
extends: .build
|
|
parallel:
|
|
matrix:
|
|
{% for arch in archs %}
|
|
- ARCH: {{ arch }}
|
|
TAG: {{ archtag[arch] }}
|
|
{% endfor %}
|
|
{% if archs|length == 0 %}
|
|
- ARCH: placeholder
|
|
TAG: shared
|
|
{% endif %}
|
|
tags:
|
|
- $TAG
|
|
script:
|
|
# Needed because gitlab fails if no jobs are ran:
|
|
# - https://gitlab.com/gitlab-org/gitlab/-/issues/368248
|
|
{% if archs|length == 0 %}
|
|
- 'true'
|
|
{% else %}
|
|
- .ci/build-$ARCH.sh
|
|
{% endif %}
|
|
|
|
# Hardware testing
|
|
|
|
# Define here all the gitlab-ci snippets that could be common between the
|
|
# different packages
|
|
|
|
# Extends from this job if the target device needs a kernel and initramfs to
|
|
# boot. This will not work if your device uses boot images.
|
|
.device-boot-flow-separate-artifacts:
|
|
variables:
|
|
CI_TRON_KERNEL__URL: "glartifact://${CI_TRON__PMB_BUILD_JOB}/${CI_TRON__PMB_EXPORT_PATH}/vmlinuz"
|
|
CI_TRON_INITRAMFS__INITRAMFS__URL: "glartifact://${CI_TRON__PMB_BUILD_JOB}/${CI_TRON__PMB_EXPORT_PATH}/initramfs"
|
|
|
|
# Extends from this job if the target device boots using fastboot and boot images
|
|
.device-boot-flow-fastboot-image:
|
|
variables:
|
|
CI_TRON_FASTBOOT__BOOT_IMAGE__URL: "glartifact://${CI_TRON__PMB_BUILD_JOB}/${CI_TRON__PMB_EXPORT_PATH}/boot.img"
|
|
|
|
# Include all the devices that need and can to be tested
|
|
|
|
{% for device in devices_under_test %}
|
|
prepare-{{ device.name }}:
|
|
stage: hardware tests
|
|
extends:
|
|
.pmos-ci-tron-build-boot-artifacts
|
|
{%- if device.has_kernel_variants %}
|
|
# Build all the boot artifacts for all the supported kernel variants in
|
|
# different jobs, but hide them behind a single job name so as not to pollute
|
|
# the pipeline.
|
|
parallel:
|
|
matrix:
|
|
- KERNEL_VARIANT:
|
|
{%- for kernel in device.kernel_variants %}
|
|
- {{ kernel }}
|
|
{%- endfor %}
|
|
{%- endif %}
|
|
needs:
|
|
- job: "build"
|
|
parallel:
|
|
matrix:
|
|
- ARCH: "{{ device.arch }}"
|
|
TAG: "{{ archtag[device.arch] }}"
|
|
variables:
|
|
DEVICE_NAME: {{ device.name }}
|
|
# NOTE: All the packages that may influence testing should have an
|
|
# `install-if postmarketos-mkinitfs-hook-ci`, so no need to add them here
|
|
INSTALL_PACKAGES: {{ device.pkgname }} {% if device.has_kernel_variants %}{{ device.pkgname }}-kernel-${KERNEL_VARIANT} {% endif %}postmarketos-mkinitfs-hook-ci
|
|
|
|
.test-{{ device.name }}:
|
|
stage: hardware tests
|
|
{%- if device.has_kernel_variants %}
|
|
# Test all the kernels in different jobs, but hide them behind a single
|
|
# job name so as not to pollute the pipeline.
|
|
parallel:
|
|
matrix:
|
|
- KERNEL_VARIANT:
|
|
{%- for kernel in device.kernel_variants %}
|
|
- {{ kernel }}
|
|
{%- endfor %}
|
|
{%- endif %}
|
|
dependencies: []
|
|
needs:
|
|
- job: 'prepare-{{ device.name }}'
|
|
artifacts: false
|
|
{%- if device.has_kernel_variants %}
|
|
parallel:
|
|
matrix:
|
|
- KERNEL_VARIANT: $[[ matrix.KERNEL_VARIANT ]]
|
|
{%- endif %}
|
|
variables:
|
|
CI_TRON__PMB_BUILD_JOB: "prepare-{{ device.name }}{% if device.has_kernel_variants %}: [$KERNEL_VARIANT]{% endif %}"
|
|
|
|
# Include the gitlab ci yml fragment, as found in
|
|
# `device/$category/device-$devicename/gitlab-ci.yml.j2` which defines the jobs
|
|
{{ device.gitlab_ci_fragment }}
|
|
|
|
{% endfor %}
|