diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1bafcfc26ab26d66332d6750859dabb3fc64ee35..ef8f64590b0c268753ecca3c2fefa9e86cbb0408 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -27,52 +27,15 @@ include: - local: '/.oniro-ci/test-generic.yaml' - local: '/.oniro-ci/machines-and-flavours.yaml' - local: '/.oniro-ci/dco.yaml' - - template: 'Workflows/MergeRequest-Pipelines.gitlab-ci.yml' -dco: - extends: .dco - -build-docs: - extends: .build-docs - -aggregate-docs: - extends: .aggregate-docs - needs: [build-docs] - -# Customize the .workspace job to set the path of the git repository to deviate -# from what the git-repo prepares. This effectively allows testing incoming -# changes that match the repository holding this CI pipeline. -.workspace: - variables: - CI_ONIRO_GIT_REPO_PATH: oniro - -# Anchor job rules, which govern if a job is instantiated in a given pipeline. -# This job is then used as another base to several different jobs, including -# .bitbake-workspace, .build-rauc-bundle and the -# .publish-rauc-bundle-to-hawkbit jobs. -# -# The rules are: modifications (changes) to the pipeline, meta-layers, flavours -# and assets OR to placement of a tag on a commit OR when a job is scheduled. -# In addition, draft merge requests will no longer start the heavy build jobs -# automatically, giving an option to the developer, to start the desired jobs -# manually. -.workspace-rules: - variables: - CI_ONIRO_MAGIC: ".gitlab-ci.yml:61:.workspace-rules" +workflow: + # Contains the essence of Workflows/MergeRequest-Pipelines.gitlab-ci.yml extended + # with Oniro specific logic. rules: + - if: '$CI_COMMIT_TAG' - if: '$CI_PIPELINE_SOURCE == "schedule"' - variables: - CI_ONIRO_MANIFEST_URL: "$CI_PROJECT_URL" - CI_ONIRO_MANIFEST_BRANCH: "$CI_COMMIT_REF_NAME" - CI_ONIRO_MAGIC: ".gitlab-ci.yml:67:.workspace-rules" - - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TITLE =~ /^(wip|draft):.*/i' - when: manual - variables: - # See below for rationale. - CI_ONIRO_MANIFEST_URL: "$CI_MERGE_REQUEST_SOURCE_PROJECT_URL" - CI_ONIRO_MANIFEST_BRANCH: "$CI_COMMIT_REF_NAME" - CI_ONIRO_MAGIC: ".gitlab-ci.yml:74:.workspace-rules" - - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' + - if: '$CI_MERGE_REQUEST_IID' changes: - assets/**/* - flavours/**/* @@ -86,34 +49,28 @@ aggregate-docs: # is done here, so that it does not clobber scheduled pipelines. variables: CI_ONIRO_MANIFEST_URL: "$CI_MERGE_REQUEST_SOURCE_PROJECT_URL" - CI_ONIRO_MANIFEST_BRANCH: "$CI_COMMIT_REF_NAME" - CI_ONIRO_MAGIC: ".gitlab-ci.yml:90:.workspace-rules" - - if: '$CI_COMMIT_TAG' - # XXX: This needs CI_ONIRO_MANIFEST_BRANCH as well, most likely. + CI_ONIRO_MAGIC: ".gitlab-ci.yml:52:workflow" +# Customize the .workspace job to set the path of the git repository to deviate +# from what the git-repo prepares. This effectively allows testing incoming +# changes that match the repository holding this CI pipeline. +.workspace: + variables: + CI_ONIRO_GIT_REPO_PATH: oniro + CI_ONIRO_MANIFEST_URL: "$CI_PROJECT_URL" + CI_ONIRO_MANIFEST_BRANCH: "$CI_COMMIT_REF_NAME" + CI_ONIRO_MAGIC: ".gitlab-ci.yml:68:.workspace" -# The three jobs defined below override the definitions from build-generic.yaml -# to inject .workspace-rules and the rules defined therein. It is important to -# understand that this is based on several separate systems: parsing and -# loading yaml, processing the include rules, and processing extends rules. -# -# This specific trick (ab)uses the fact that yaml-top-level is one big map of -# entities, and we can define an entity multiple times to effectively extend or -# replace specific elements. -# -# The following three jobs are equivalent to copy-pasting the modified extends -# line into the jobs in .oniro-ci/build-generic.yaml, because map/dictionary -# entries compute the union of the defined keys, unlike list entries or scalars -# that replace the previous value. +dco: + extends: .dco -.bitbake-workspace: - extends: [.workspace-rules, .workspace] +build-docs: + extends: .build-docs -.build-rauc-bundle: - extends: [.workspace-rules, .build-image] +aggregate-docs: + extends: .aggregate-docs + needs: [build-docs] -.publish-rauc-bundle-to-hawkbit: - extends: [.workspace-rules] # Build a RAUC update bundle for Raspberry Pi 4 bundle-raspberrypi4-64: diff --git a/.oniro-ci/build-generic.yaml b/.oniro-ci/build-generic.yaml index 7149b47f89dfcf3556fd4cac2d725b3d19b9354d..0a03ca586274ab1fb8481c421a8cbb3d74f6bb74 100644 --- a/.oniro-ci/build-generic.yaml +++ b/.oniro-ci/build-generic.yaml @@ -75,6 +75,12 @@ # Clean up after ourselves. - rm -f "$CI_PROJECT_DIR"/.scratch-dir-name - rm -rf "$SCRATCH_DIR" + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TITLE =~ /^(wip|draft):.*/i' + when: manual + variables: + CI_ONIRO_MANIFEST_URL: "$CI_MERGE_REQUEST_SOURCE_PROJECT_URL" + CI_ONIRO_MAGIC: ".oniro-ci/build-generic.yml:83:workflow" # This job is documented in docs/ci/hidden-jobs/bitbake-workspace.rst .bitbake-workspace: