prplos/.gitlab-ci.yml
Petr Štetiar 55fa5598c7
ci: cram: gate arming builds on component selection
An automatic CRAM job waits for a manual build only when that build is
non-optional and not allowed to fail. Leaving the manual build default
in place would skip the downstream job initially and could run it after
a failed build.

Override rules on the six builds consumed by automatic CRAM jobs. Make
a build blocking exactly when its board's automatic job is armed, using
the same changes anchors and label policy. Keep variable and skip
stand-down paths manual and non-blocking.

GitLab gives a manual job selected through rules the real default of
allow_failure: false. Scope the explicit non-blocking fallback to merge
request pipelines so non-arming MRs do not block, while push, web, API,
and branch pipelines retain their existing implicit blocking form.

Preserve schedule, designated-branch, and release-tag behavior. Leave
the x86_64 and extender builds unchanged.

Assisted-by: codex:gpt-5.6-sol
References: CI-9
Signed-off-by: Petr Štetiar <petr.stetiar@prplfoundation.org>
2026-08-26 20:37:11 +02:00

595 lines
17 KiB
YAML

variables:
CI_DESIGNATED_BRANCH: prpl/nightly
CI_DESIGNATED_BRANCH_SLUG: prpl-nightly
.cram changes wnc-freedom:
rules:
- changes: &cram_changes_wnc_freedom
- profiles/qca_ipq95xx.yml
- profiles/secure_boot_emmc.yml
- profiles/feed_amx.yml
- profiles/feed_prplmesh.yml
- profiles/feed_prplos.yml
- profiles/lcm.yml
- profiles/prpl_core.yml
- profiles/prpl.yml
- profiles/mgmt.yml
- profiles/security.yml
- profiles/cellular.yml
- profiles/thread.yml
- .gitlab/tests/cram/generic/**
- .gitlab/tests/cram/post/**
- .gitlab/testbed.yml
- package/**
- target/**
- toolchain/**
- include/**
- config/**
- tools/**
- feeds.conf.default
- Makefile
- rules.mk
- .gitlab/tests/cram/wnc-freedom/**
- .gitlab/testbed/wnc-freedom.yml
.cram changes mxl25641-hdk-6:
rules:
- changes: &cram_changes_mxl25641_hdk_6
- profiles/mxl_x86_osp_tb341_v2.yml
- profiles/mxl_wlan_hostap_ng_wav700.yml
- profiles/secure_boot_emmc.yml
- profiles/feed_amx.yml
- profiles/feed_prplmesh.yml
- profiles/feed_prplos.yml
- profiles/lcm.yml
- profiles/prpl_core.yml
- profiles/prpl.yml
- profiles/mgmt.yml
- profiles/security.yml
- profiles/cellular.yml
- profiles/thread.yml
- .gitlab/tests/cram/generic/**
- .gitlab/tests/cram/post/**
- .gitlab/testbed.yml
- package/**
- target/**
- toolchain/**
- include/**
- config/**
- tools/**
- feeds.conf.default
- Makefile
- rules.mk
- .gitlab/tests/cram/mxl25641-hdk-6/**
- .gitlab/testbed/mxl25641-hdk-6.yml
.cram changes turris-omnia:
rules:
- changes: &cram_changes_turris_omnia
- profiles/mvebu.yml
- .gitlab/tests/cram/turris-omnia/**
- .gitlab/testbed/turris-omnia.yml
.cram changes prpl-haze:
rules:
- changes: &cram_changes_prpl_haze
- profiles/ipq807x.yml
- .gitlab/tests/cram/prpl-haze/**
- .gitlab/testbed/prpl-haze.yml
.cram changes arcadyan-mozart:
rules:
- changes: &cram_changes_arcadyan_mozart
- profiles/mtk_filogic.yml
- .gitlab/tests/cram/arcadyan-mozart/**
- .gitlab/testbed/arcadyan-mozart.yml
.cram changes nokia-valyrian:
rules:
- changes: &cram_changes_nokia_valyrian
- profiles/airoha_an7581.yml
- .gitlab/tests/cram/nokia-valyrian/**
- .gitlab/testbed/nokia-valyrian.yml
include:
- local: .gitlab/build.yml
- local: .gitlab/blackduck.yml
- local: .gitlab/release.yml
- local: .gitlab/cdrouter.yml
- local: .gitlab/prplmesh.yml
- local: .gitlab/cdrouter/prpl-haze.yml
- local: .gitlab/cdrouter/turris-omnia.yml
- local: .gitlab/cdrouter/mxl25641-hdk-6.yml
- local: .gitlab/cdrouter/arcadyan-mozart.yml
- local: .gitlab/cdrouter/wnc-freedom.yml
- local: .gitlab/cdrouter/nokia-valyrian.yml
- local: .gitlab/coverity.yml
- local: .gitlab/docker.yml
- local: .gitlab/docker/builder/gitlab.yml
- local: .gitlab/docker/sdk/gitlab.yml
- local: .gitlab/docker/ib/gitlab.yml
- local: .gitlab/docker/ib/lcm/gitlab.yml
- local: .gitlab/testbed.yml
- local: .gitlab/testbed/prpl-haze.yml
- local: .gitlab/testbed/turris-omnia.yml
- local: .gitlab/testbed/mxl25641-hdk-6.yml
- local: .gitlab/testbed/arcadyan-mozart.yml
- local: .gitlab/testbed/wnc-freedom.yml
- local: .gitlab/testbed/nokia-valyrian.yml
stages:
- docker
- docker test
- docker deploy
- build
- release
- docker SDK and IB
- docker SDK and IB test
- docker SDK and IB deploy
- docker IB LCM container
- run
- smoke tests
- certification tests
- cdrouter
- coverity
- blackduck
build test mxl_x86_osp_tb341_v2 mxl_wlan_hostap_ng_wav700 prpl cellular security thread:
extends: .build test config
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DESIGNATED_BRANCH'
- if: '$CI_COMMIT_TAG =~ /^prplware-v[0-9]+\.[0-9]+\.[0-9]+.*$/'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CRAM_COMPONENTS != null'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::skip($|,)/'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::(full|prplmesh|lcm|prplos)($|,)/'
when: manual
allow_failure: false
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *cram_changes_mxl25641_hdk_6
when: manual
allow_failure: false
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: manual
allow_failure: true
- when: manual
build test mvebu prpl security:
extends: .build test config
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DESIGNATED_BRANCH'
- if: '$CI_COMMIT_TAG =~ /^prplware-v[0-9]+\.[0-9]+\.[0-9]+.*$/'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CRAM_COMPONENTS != null'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::skip($|,)/'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *cram_changes_turris_omnia
when: manual
allow_failure: false
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: manual
allow_failure: true
- when: manual
build test x86_64 prpl security:
extends: .build test config
build test ipq807x prpl security:
extends: .build test config
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DESIGNATED_BRANCH'
- if: '$CI_COMMIT_TAG =~ /^prplware-v[0-9]+\.[0-9]+\.[0-9]+.*$/'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CRAM_COMPONENTS != null'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::skip($|,)/'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *cram_changes_prpl_haze
when: manual
allow_failure: false
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: manual
allow_failure: true
- when: manual
build test mtk_filogic prpl security:
extends: .build test config
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DESIGNATED_BRANCH'
- if: '$CI_COMMIT_TAG =~ /^prplware-v[0-9]+\.[0-9]+\.[0-9]+.*$/'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CRAM_COMPONENTS != null'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::skip($|,)/'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *cram_changes_arcadyan_mozart
when: manual
allow_failure: false
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: manual
allow_failure: true
- when: manual
build test airoha_an7581 prpl security:
extends: .build test config
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DESIGNATED_BRANCH'
- if: '$CI_COMMIT_TAG =~ /^prplware-v[0-9]+\.[0-9]+\.[0-9]+.*$/'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CRAM_COMPONENTS != null'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::skip($|,)/'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *cram_changes_nokia_valyrian
when: manual
allow_failure: false
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: manual
allow_failure: true
- when: manual
build test qca_ipq95xx prpl cellular security thread:
extends: .build test config
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never
- if: '$CI_COMMIT_BRANCH == $CI_DESIGNATED_BRANCH'
- if: '$CI_COMMIT_TAG =~ /^prplware-v[0-9]+\.[0-9]+\.[0-9]+.*$/'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CRAM_COMPONENTS != null'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::skip($|,)/'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::(full|prplmesh|lcm|prplos)($|,)/'
when: manual
allow_failure: false
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *cram_changes_wnc_freedom
when: manual
allow_failure: false
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
when: manual
allow_failure: true
- when: manual
build test qca_ipq95xx extender_minimal cellular security thread:
extends: .build test config
build test qca_ipq95xx extender_full cellular security thread:
extends: .build test config
coverity scan qca_ipq95xx prpl extender_full cellular thread:
extends: .coverity scan config
variables:
CI_COVERITY_COMPILER_TEMPLATE_LIST: >
aarch64-openwrt-linux-gcc
aarch64-openwrt-linux-musl-gcc
blackduck scan mxl_x86_osp_tb341_v2 mxl_wlan_hostap_ng_wav700 prpl extender_full cellular security thread:
extends: .blackduck scan config
blackduck scan qca_ipq95xx prpl extender_full cellular security thread:
extends: .blackduck scan config
cram Omnia [auto]:
needs: ["build test mvebu prpl security"]
extends:
- .turris-omnia testbed
- .cram_component_auto
timeout: 85 minutes
rules:
- if: '$CI_PIPELINE_SOURCE != "merge_request_event"'
when: never
- if: '$CRAM_COMPONENTS != null'
when: never
- if: '$CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::skip($|,)/'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *cram_changes_turris_omnia
- when: manual
allow_failure: true
cram Haze [auto]:
needs: ["build test ipq807x prpl security"]
extends:
- .prpl-haze testbed
- .cram_component_auto
timeout: 85 minutes
rules:
- if: '$CI_PIPELINE_SOURCE != "merge_request_event"'
when: never
- if: '$CRAM_COMPONENTS != null'
when: never
- if: '$CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::skip($|,)/'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *cram_changes_prpl_haze
- when: manual
allow_failure: true
cram OSPv2 [auto]:
needs: ["build test mxl_x86_osp_tb341_v2 mxl_wlan_hostap_ng_wav700 prpl cellular security thread"]
extends:
- .mxl25641-hdk-6 testbed
- .cram_component_auto
timeout: 85 minutes
rules:
- if: '$CI_PIPELINE_SOURCE != "merge_request_event"'
when: never
- if: '$CRAM_COMPONENTS != null'
when: never
- if: '$CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::skip($|,)/'
when: manual
allow_failure: true
- if: '$CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::(full|prplmesh|lcm|prplos)($|,)/'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *cram_changes_mxl25641_hdk_6
- when: manual
allow_failure: true
cram Freedom [auto]:
needs: ["build test qca_ipq95xx prpl cellular security thread"]
extends:
- .wnc-freedom testbed
- .cram_component_auto
timeout: 85 minutes
rules:
- if: '$CI_PIPELINE_SOURCE != "merge_request_event"'
when: never
- if: '$CRAM_COMPONENTS != null'
when: never
- if: '$CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::skip($|,)/'
when: manual
allow_failure: true
- if: '$CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::(full|prplmesh|lcm|prplos)($|,)/'
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *cram_changes_wnc_freedom
- when: manual
allow_failure: true
cram Mozart [auto]:
needs: ["build test mtk_filogic prpl security"]
extends:
- .arcadyan-mozart testbed
- .cram_component_auto
timeout: 85 minutes
rules:
- if: '$CI_PIPELINE_SOURCE != "merge_request_event"'
when: never
- if: '$CRAM_COMPONENTS != null'
when: never
- if: '$CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::skip($|,)/'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *cram_changes_arcadyan_mozart
- when: manual
allow_failure: true
cram Valyrian [auto]:
needs: ["build test airoha_an7581 prpl security"]
extends:
- .nokia-valyrian testbed
- .cram_component_auto
timeout: 85 minutes
rules:
- if: '$CI_PIPELINE_SOURCE != "merge_request_event"'
when: never
- if: '$CRAM_COMPONENTS != null'
when: never
- if: '$CI_MERGE_REQUEST_LABELS =~ /(^|,)cram::skip($|,)/'
when: manual
allow_failure: true
- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'
changes: *cram_changes_nokia_valyrian
- when: manual
allow_failure: true
report cram selection:
extends: .report_cram_selection
needs: []
rules:
- if: '$CI_PIPELINE_SOURCE != "merge_request_event"'
when: never
- when: manual
allow_failure: true
cram Omnia [full]:
allow_failure: true
needs: ["build test mvebu prpl security"]
extends: .turris-omnia testbed
timeout: 85 minutes
variables:
COMPONENT: full
cram Omnia [prplmesh]:
allow_failure: true
needs: ["build test mvebu prpl security"]
extends: .turris-omnia testbed
variables:
COMPONENT: prplmesh
cram Omnia [lcm]:
allow_failure: true
needs: ["build test mvebu prpl security"]
extends: .turris-omnia testbed
variables:
COMPONENT: lcm
cram Omnia [prplos]:
allow_failure: true
needs: ["build test mvebu prpl security"]
extends: .turris-omnia testbed
variables:
COMPONENT: prplos
cram Haze [full]:
allow_failure: true
needs: ["build test ipq807x prpl security"]
extends: .prpl-haze testbed
timeout: 85 minutes
variables:
COMPONENT: full
cram Haze [prplmesh]:
allow_failure: true
needs: ["build test ipq807x prpl security"]
extends: .prpl-haze testbed
variables:
COMPONENT: prplmesh
cram Haze [lcm]:
allow_failure: true
needs: ["build test ipq807x prpl security"]
extends: .prpl-haze testbed
variables:
COMPONENT: lcm
cram Haze [prplos]:
allow_failure: true
needs: ["build test ipq807x prpl security"]
extends: .prpl-haze testbed
variables:
COMPONENT: prplos
cram OSPv2 [full]:
needs: ["build test mxl_x86_osp_tb341_v2 mxl_wlan_hostap_ng_wav700 prpl cellular security thread"]
extends: .mxl25641-hdk-6 testbed
timeout: 85 minutes
variables:
COMPONENT: full
cram OSPv2 [prplmesh]:
needs: ["build test mxl_x86_osp_tb341_v2 mxl_wlan_hostap_ng_wav700 prpl cellular security thread"]
extends: .mxl25641-hdk-6 testbed
variables:
COMPONENT: prplmesh
cram OSPv2 [lcm]:
needs: ["build test mxl_x86_osp_tb341_v2 mxl_wlan_hostap_ng_wav700 prpl cellular security thread"]
extends: .mxl25641-hdk-6 testbed
variables:
COMPONENT: lcm
cram OSPv2 [prplos]:
needs: ["build test mxl_x86_osp_tb341_v2 mxl_wlan_hostap_ng_wav700 prpl cellular security thread"]
extends: .mxl25641-hdk-6 testbed
variables:
COMPONENT: prplos
cram Freedom [full]:
needs: ["build test qca_ipq95xx prpl cellular security thread"]
extends: .wnc-freedom testbed
timeout: 85 minutes
variables:
COMPONENT: full
cram Freedom [prplmesh]:
needs: ["build test qca_ipq95xx prpl cellular security thread"]
extends: .wnc-freedom testbed
variables:
COMPONENT: prplmesh
cram Freedom [lcm]:
needs: ["build test qca_ipq95xx prpl cellular security thread"]
extends: .wnc-freedom testbed
variables:
COMPONENT: lcm
cram Freedom [prplos]:
needs: ["build test qca_ipq95xx prpl cellular security thread"]
extends: .wnc-freedom testbed
variables:
COMPONENT: prplos
cram Mozart [full]:
needs:
- job: build test mtk_filogic prpl security
optional: true
extends: .arcadyan-mozart testbed
timeout: 85 minutes
variables:
COMPONENT: full
cram Mozart [prplmesh]:
needs:
- job: build test mtk_filogic prpl security
optional: true
extends: .arcadyan-mozart testbed
variables:
COMPONENT: prplmesh
cram Mozart [lcm]:
needs:
- job: build test mtk_filogic prpl security
optional: true
extends: .arcadyan-mozart testbed
variables:
COMPONENT: lcm
cram Mozart [prplos]:
needs:
- job: build test mtk_filogic prpl security
optional: true
extends: .arcadyan-mozart testbed
variables:
COMPONENT: prplos
cram Valyrian [full]:
needs:
- job: build test airoha_an7581 prpl security
optional: true
extends: .nokia-valyrian testbed
timeout: 85 minutes
variables:
COMPONENT: full
cram Valyrian [prplmesh]:
needs:
- job: build test airoha_an7581 prpl security
optional: true
extends: .nokia-valyrian testbed
variables:
COMPONENT: prplmesh
cram Valyrian [lcm]:
needs:
- job: build test airoha_an7581 prpl security
optional: true
extends: .nokia-valyrian testbed
variables:
COMPONENT: lcm
cram Valyrian [prplos]:
needs:
- job: build test airoha_an7581 prpl security
optional: true
extends: .nokia-valyrian testbed
variables:
COMPONENT: prplos