diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 47363af5b6cc68c6d4700212f6bf147d70543a74..82f7b281a23fa3ec16d49266207c57a119498408 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -13,7 +13,6 @@ include: file: - .oniro-ci/dco.yaml - .oniro-ci/reuse.yaml - - .oniro-ci/build-generic.yaml dco: extends: .dco @@ -26,49 +25,123 @@ reuse: rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' -# Customize the .workspace job to set the path of the git repository to deviate -# from what the git-repo manifest prepares. This effectively allows testing -# incoming changes that match the repository holding this CI pipeline. -.workspace: + +# Naming scheme for variables is defined as follows: +# +# CI_ONIRO_*: +# Oniro specific variables used during CI/CD process. Variables in this group +# should use meaningful names and avoid abbreviations, if possible. +# +# CI_ONIRO_BB_LOCAL_CONF_*: +# Mechanism for injecting variables into Bitbake configuration files. +# Variables in this group represent existing Bitbake/Yocto variables and +# retain their original name, apart from the prefix. +# +# CI_*: +# Third party variables used during CI/CD process, defined by GitLab. +# Variables in this group are defined by GitLab and retain their original +# name. +# +# GIT_STRATEGY, CACHE_COMPRESSOIN_LEVEL: +# Part of GitLab interface. +.oniro-repo-workspace: + interruptible: true + image: + name: registry.ostc-eu.org/ostc/oniro/bitbake-builder:latest variables: - CI_ONIRO_GIT_REPO_PATH: docs + GIT_STRATEGY: none + CACHE_COMPRESSION_LEVEL: fastest + CI_ONIRO_REPO_WORKSPACE_URL: https://gitlab.eclipse.org/eclipse/oniro-core/oniro.git + CI_ONIRO_REPO_WORKSPACE_REV: kirkstone + CI_ONIRO_REPO_WORKSPACE_DIR: $CI_PROJECT_DIR/.cache/repo-workspace + CI_ONIRO_REPO_WORKSPACE_CACHE_PREFIX: workspace + CI_ONIRO_REPO_WORKSPACE_LOCAL_MANIFEST: > + <?xml version="1.0" encoding="UTF-8"?> + <manifest> + <!-- remove original docs project entry --> + <remove-project name="oniro-core/docs.git" /> + <!-- add remote representing the project --> + <remote name="oniro-override" fetch="${CI_PROJECT_URL}/../" /> + <!-- add docs at the exact version are testing --> + <project name="${CI_PROJECT_NAME}" path="docs" remote="oniro-override" revision="${CI_COMMIT_SHA}" /> + </manifest> + cache: + - key: $CI_ONIRO_REPO_WORKSPACE_CACHE_PREFIX-$CI_ONIRO_REPO_WORKSPACE_REV + paths: [$CI_ONIRO_REPO_WORKSPACE_DIR] + when: always + before_script: + - | + + function gl_section_open() { + printf '\e[0K''section_start'':%s:%s\r\e[0K%s\n' "$(date +%s)" "$1" "$2" + } + + function gl_section_open_collapsed() { + printf '\e[0K''section_start'':%s:%s[collapsed=true]\r\e[0K%s\n' "$(date +%s)" "$1" "$2" + } + + function gl_section_close() { + printf '\e[0K''section_end'':%s:%s\r\e[0K\n' "$(date +%s)" "$1" + } + + - gl_section_open_collapsed system_info "Querying system information" + - uname -a + - cat /etc/os-release + - free -m + - lscpu + - env | grep -E '^CI_ONIRO' | sort + - gl_section_close system_info + + - gl_section_open_collapsed setup_git "Setting up git" + - git config --global --add safe.directory "$CI_PROJECT_DIR" + - git config --global user.name "CI/CD Automation" + - git config --global user.email "ci-cd@example.org" + - gl_section_close setup_git + + - gl_section_open_collapsed workspace_setup "Setting up repo workspace" + - mkdir -p "$CI_ONIRO_REPO_WORKSPACE_DIR" + - pushd "$CI_ONIRO_REPO_WORKSPACE_DIR" + - echo "Initializing repository workspace from $CI_ONIRO_REPO_WORKSPACE_URL and $CI_ONIRO_REPO_WORKSPACE_REV" + - repo init --manifest-url "$CI_ONIRO_REPO_WORKSPACE_URL" --manifest-branch "$CI_ONIRO_REPO_WORKSPACE_REV" --no-clone-bundle + - mkdir -p "${CI_ONIRO_REPO_WORKSPACE_DIR}/.repo/local_manifests" + - test -n "${CI_ONIRO_REPO_WORKSPACE_LOCAL_MANIFEST-}" && echo "$CI_ONIRO_REPO_WORKSPACE_LOCAL_MANIFEST" | tee "${CI_ONIRO_REPO_WORKSPACE_DIR}/.repo/local_manifests/local.xml" + - echo "Synchronizing repository workspace" + - repo sync --force-sync + - gl_section_close workspace_setup -# Disable all the bitbake jobs, since we are not building any code here. -.bitbake-workspace: - rules: - - when: never -# Define a build-docs job that extends both the .workspace, for the general -# workspace setup, and .build-docs, for the documentation build logic. The -# script first assembles the workspace and then proceeds to build the -# documentation. -# -# The job extends more than one parent, with the order being relevant for, -# among others, the "rules" section. build-docs: - extends: [.workspace, .build-docs] - variables: - CI_ONIRO_INSTANCE_SIZE: s3.large.2 + extends: [.oniro-repo-workspace] + interruptible: true + image: + name: registry.ostc-eu.org/ostc/oniro/docs-builder:latest script: - - !reference [.workspace, script] - - !reference [.build-docs, script] - # Artifacts are relative to CI_PROJECT_DIR so we need to provide the build - # docs there. - - mv "$SCRATCH_DIR"/docs/build/ "$CI_PROJECT_DIR" || true + - make -C docs + - mv docs/build "$CI_PROJECT_DIR" artifacts: paths: - build rules: # Build the docs when a merge request is created. - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' + variables: + CI_ONIRO_REPO_WORKSPACE_LOCAL_MANIFEST: > + <?xml version="1.0" encoding="UTF-8"?> + <manifest> + <!-- remove original docs project entry --> + <remove-project name="oniro-core/docs.git" /> + <!-- add remote representing the project --> + <remote name="oniro-override" fetch="${CI_MERGE_REQUEST_SOURCE_PROJECT_URL}/../" /> + <!-- add docs at the exact version are testing --> + <project name="${CI_PROJECT_NAME}" path="docs" remote="oniro-override" revision="${CI_COMMIT_SHA}" /> + </manifest> # Or when things land. - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' deploy: - extends: .workspace + extends: .oniro-repo-workspace stage: deploy script: - - !reference [.workspace, script] # We are in the root of the git-repo workspace. - git clone https://user:$CI_ONIRO_AGGREGATED_DOCS_TOKEN@gitlab.eclipse.org/eclipse/oniro-core/oniro-readthedocs-aggregated.git aggregated - find aggregated -maxdepth 1 -not -path aggregated/.git -not -path aggregated -exec rm -rvf {} \;