mirror of
https://gitlab.postmarketos.org/postmarketOS/pmaports.git
synced 2025-07-12 16:19:48 +03:00
We should not need to apk upgrade on stable just to check that MR settings are correct. Simplify that, and remove an anchor only used in one place. Part-of: https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/6471 [ci:skip-build]: already built successfully in CI
204 lines
4.9 KiB
YAML
204 lines
4.9 KiB
YAML
---
|
|
|
|
# global settings
|
|
image: alpine:latest
|
|
after_script:
|
|
- .ci/lib/move_logs.sh $CI_PROJECT_DIR
|
|
stages:
|
|
- lint
|
|
- prepare
|
|
- build
|
|
- autoupdate
|
|
- test
|
|
variables:
|
|
# Default of 20 is pretty small, sometimes MRs have >20 commits in them. 100
|
|
# seems like a reasonable balance. If this is too low, git merge-base (from ci/
|
|
# common.py) can fail
|
|
GIT_DEPTH: 100
|
|
|
|
# This defines the rules for when a pipeline should run.
|
|
workflow:
|
|
rules:
|
|
# Run for merge requests
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
# Run scheduled pipeline for autoupdate or manually triggered pipeline
|
|
- if: $CI_PIPELINE_SOURCE == "schedule" || $CI_PIPELINE_SOURCE == "web"
|
|
|
|
# Some packages have their own yaml files defining tests. All of these should contain
|
|
# only jobs which extend the .package-test job!
|
|
include: "**/.gitlab-ci.yml"
|
|
|
|
# device documentation
|
|
wiki:
|
|
stage: lint
|
|
rules:
|
|
- if: &mr_rule $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
changes:
|
|
- .ci/**/*
|
|
- .ci/build-jobs.yaml.j2
|
|
- .gitlab-ci.yml
|
|
- device/*/device-*/*
|
|
script:
|
|
- .ci/lib/gitlab_prepare_ci.sh
|
|
- .ci/wiki.sh
|
|
|
|
# testcases linting
|
|
ruff:
|
|
stage: lint
|
|
rules:
|
|
- if: *mr_rule
|
|
changes:
|
|
- .ci/*
|
|
- .ci/*/*
|
|
- .ci/build-jobs.yaml.j2
|
|
- .gitlab-ci.yml
|
|
script:
|
|
- .ci/lib/gitlab_prepare_ci.sh
|
|
- .ci/ruff.sh
|
|
|
|
# shellcheck and various grep checks
|
|
shellcheck-grep:
|
|
stage: lint
|
|
rules:
|
|
- if: *mr_rule
|
|
script:
|
|
- .ci/lib/gitlab_prepare_ci.sh
|
|
- .ci/shellcheck.sh
|
|
- .ci/grep.sh
|
|
|
|
editor-config:
|
|
stage: lint
|
|
rules:
|
|
- if: *mr_rule
|
|
script:
|
|
- .ci/lib/gitlab_prepare_ci.sh
|
|
- .ci/ec.sh
|
|
|
|
# aports checks (generic)
|
|
pytest-commits:
|
|
stage: lint
|
|
rules:
|
|
- if: *mr_rule
|
|
script:
|
|
- .ci/lib/gitlab_prepare_ci.sh
|
|
- .ci/pytest.sh
|
|
- .ci/commits.sh
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- log.txt
|
|
- log_testsuite_pmaports.txt
|
|
- pmbootstrap.cfg
|
|
expire_in: 1 week
|
|
|
|
# APKBUILD linting
|
|
aport-lint:
|
|
stage: lint
|
|
rules:
|
|
- if: *mr_rule
|
|
script:
|
|
- .ci/lib/gitlab_prepare_ci.sh
|
|
- .ci/apkbuild-lint.sh
|
|
allow_failure: true
|
|
|
|
# kernel kconfig check
|
|
kernel-kconfig:
|
|
stage: lint
|
|
rules:
|
|
- if: *mr_rule
|
|
changes:
|
|
- kconfigcheck.toml
|
|
allow_failure: true
|
|
- if: *mr_rule
|
|
changes:
|
|
- device/*/linux-*/config-*
|
|
script:
|
|
- .ci/lib/gitlab_prepare_ci.sh
|
|
- .ci/kconfig.sh
|
|
|
|
# Verify checksums
|
|
verify-checksums:
|
|
stage: lint
|
|
rules:
|
|
- if: *mr_rule
|
|
script:
|
|
- .ci/lib/gitlab_prepare_ci.sh
|
|
- .ci/verify-checksums.sh
|
|
|
|
# MR settings
|
|
# (Checks for "Allow commits from members who can merge to the target branch")
|
|
mr-settings:
|
|
stage: lint
|
|
rules:
|
|
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
before_script:
|
|
- apk -q add python3
|
|
script:
|
|
- wget -q "https://gitlab.postmarketos.org/postmarketOS/ci-common/-/raw/master/check_mr_settings.py"
|
|
- python3 ./check_mr_settings.py
|
|
|
|
# Calculate build of changed aports using a dynamic downstream pipelines:
|
|
# https://docs.gitlab.com/ci/pipelines/downstream_pipelines/#dynamic-child-pipelines
|
|
# For those to work, we need two jobs:
|
|
# * First one (this one) that generates a valid yaml file with the job yaml as
|
|
# an artifact
|
|
# * Second one (build-jobs) that has a "trigger" key with the yaml file from
|
|
# which to trigger pipelines
|
|
# To avoid reworking the whole CI file, for now we are re-using this same file
|
|
# to trigger the downstream pipeline. In that case, $CI_PIPELINE_SOURCE will
|
|
# be set to "parent_pipeline", and only the jobs that extend .build will run
|
|
generate-build-jobs:
|
|
stage: prepare
|
|
before_script:
|
|
- .ci/lib/gitlab_prepare_ci.sh
|
|
needs: []
|
|
script:
|
|
- wget "https://gitlab.postmarketos.org/postmarketOS/ci-common/-/raw/master/install_pmbootstrap.sh"
|
|
- sh ./install_pmbootstrap.sh py3-jinja2
|
|
- .ci/lib/generate_build_jobs.py .ci/build-jobs.yaml.j2 .ci/build-jobs.yaml
|
|
|
|
artifacts:
|
|
paths:
|
|
- .ci/build-jobs.yaml
|
|
rules:
|
|
- if: *mr_rule
|
|
|
|
build-jobs:
|
|
stage: build
|
|
trigger:
|
|
include:
|
|
- artifact: .ci/build-jobs.yaml
|
|
job: generate-build-jobs
|
|
strategy: depend
|
|
forward:
|
|
# So that we don't have to duplicate GIT_DEPTH
|
|
pipeline_variables: true
|
|
rules:
|
|
- if: *mr_rule
|
|
|
|
auto-update:
|
|
stage: autoupdate
|
|
rules:
|
|
# This variable is set in the scheduled pipeline configuration. It should be a space separated list of
|
|
# package names to update.
|
|
- if: $AUTOUPDATE_PACKAGES != null && $CI_PIPELINE_SOURCE == "schedule" || $CI_PIPELINE_SOURCE == "web"
|
|
before_script:
|
|
- .ci/lib/gitlab_prepare_ci.sh
|
|
script:
|
|
- .ci/autoupdate.sh "$AUTOUPDATE_PACKAGES"
|
|
after_script:
|
|
- .ci/lib/move_logs.sh $CI_PROJECT_DIR
|
|
artifacts:
|
|
when: on_failure
|
|
paths:
|
|
- log.txt
|
|
- log_testsuite_pmaports.txt
|
|
- pmbootstrap.cfg
|
|
|
|
# Template for package test jobs defined per-package
|
|
.package-test:
|
|
stage: test
|
|
rules:
|
|
- if: *mr_rule
|
|
before_script:
|
|
- .ci/lib/gitlab_prepare_ci.sh
|