diff --git a/build-pipeline-ci-test.yml b/build-pipeline-ci-test.yml index cfe4174d2840b890273e2cfc3bcef776765dda2d..f84cbf236779a124852b9988344343680199909b 100644 --- a/build-pipeline-ci-test.yml +++ b/build-pipeline-ci-test.yml @@ -6,7 +6,7 @@ include: - project: '${CI_PROJECT_ROOT_NAMESPACE}/yocto/infrastructure/gitlab-ci' ref: ${GITLAB_CI_REVISION} file: - - build-common.yml + - build-pipeline.yml - common.yml stages: diff --git a/build-pipeline-yocto.yml.jinja2 b/build-pipeline-yocto.yml.jinja2 index 3eaf71e1b2149455b66788a32b8cc5416041456a..643f848c32dbab2dd6ed8ee71d783a186e6d232c 100644 --- a/build-pipeline-yocto.yml.jinja2 +++ b/build-pipeline-yocto.yml.jinja2 @@ -8,8 +8,7 @@ include: - project: '{{ CI_PROJECT_ROOT_NAMESPACE }}/yocto/infrastructure/gitlab-ci' ref: {{ GITLAB_CI_REVISION }} file: - - build-common.yml - - build-yocto.yml + - build-pipeline.yml - common.yml stages: diff --git a/build-common.yml b/build-pipeline.yml similarity index 81% rename from build-common.yml rename to build-pipeline.yml index c45f3fd7315957a187dca9af70b9bf942c73c69e..563b4e00a5b3e86426a930d5f3b33d98f169ca9c 100644 --- a/build-common.yml +++ b/build-pipeline.yml @@ -8,7 +8,7 @@ workflow: # -------------------------------------------------------------------------------------- # Scripts # -------------------------------------------------------------------------------------- -.docker_check: +.docker_check: &docker_check # Check if the build folder is empty. Sometimes the docker volume for the build is not # removed afterwards (e.g. in case of a timeout), then a follow-up build might fail. - |- @@ -21,7 +21,7 @@ workflow: exit 1 fi -.setup_ssh: +.setup_ssh: &setup_ssh # Setup ssh key to access private repos # https://docs.gitlab.com/ee/ci/ssh_keys/#ssh-keys-when-using-the-docker-executor # An SSH keypair has been generated for the manifest's pipeline to be able to access @@ -45,7 +45,7 @@ workflow: # Write SSH configuration from variable to config file - echo "$SSH_CONFIG" > ~/.ssh/config -.repo_checkout: +.repo_checkout: &repo_checkout - echo "${LOGPREFIX} Perform repo checkout" - cd ${CI_PROJECT_DIR} - repo init --submodules -u ${CI_REPOSITORY_URL} @@ -53,6 +53,74 @@ workflow: - repo sync --detach --current-branch --force-remove-dirty --optimized-fetch --force-sync +.collect_srcrevs: &collect_srcrevs + # write all package AUTOREVS to file + - |- + SRCREVS_FILE="${CI_PROJECT_DIR}/${BUILDPATH}/${IMAGEPATH}/BUILD_SRCREVS.log" + if [ -d "$( dirname "${SRCREVS_FILE}" )" ];then + buildhistory-collect-srcrevs > ${SRCREVS_FILE} + echo "${LOGPREFIX} buildhistory-collect-srcrevs:" + cat ${SRCREVS_FILE} + fi + +.dump_install_command: &dump_install_command + # print install instructions + - |- + if [[ ! -z "${INSTALLSCRIPT}" ]]; then + SCRIPT="${CI_PROJECT_DIR}/${BUILDPATH}/${IMAGEPATH}/${INSTALLSCRIPT}" + if [ ! -f "${SCRIPT}" ]; then + echo "Install script missing, searched for '$SCRIPT'" + exit 1 + fi + + if [ "$CI_PROJECT_VISIBILITY" = "public" ];then + cat <<-EOF + ============================== + Install the image: + + FNG="$FNG_INSTALL_URL" + curl --location "\$FNG" | sh -s -- --url="\$(dirname "\$FNG")" + ============================== + EOF + else + cat <<-EOF + ============================== + Install the image: + + export GITLAB_TOKEN=<your_access_token> + FNG="$FNG_INSTALL_URL" + curl --location --header "PRIVATE-TOKEN: \$GITLAB_TOKEN" "\$FNG" \ + | sh -s -- --url="\$(dirname "\$FNG")" + ============================== + EOF + fi + fi + +.build_script: &build_script + # setup build environment + - echo "${LOGPREFIX} Build configuration MACHINE=${CI_PARAM_MACHINE} + DISTRO=${CI_PARAM_DISTRO} IMAGE=${CI_PARAM_IMAGE}" + - source build.env + - echo "${LOGPREFIX} Using build dir ${BUILDPATH}" + - export MACHINE="${CI_PARAM_MACHINE}" + - export DISTRO="${CI_PARAM_DISTRO}" + - export EULA="1" + - source ./"${SETUPSCRIPT}" "${BUILDPATH}" + # start build + - echo -e "section_start:`date +%s`:bitbake_run\r\e[0KBitbake Log" + - echo "${LOGPREFIX} bitbake ${CI_PARAM_IMAGE} -c ${BITBAKE_TASK}" + - bitbake "${CI_PARAM_IMAGE}" -c "${BITBAKE_TASK}" + - echo -e "section_end:`date +%s`:bitbake_run\r\e[0K" + +.save_build_env: &save_build_env + - echo "BUILD_MACHINE=$CI_PARAM_MACHINE" > build.env + - echo "BUILD_IMAGE=$CI_PARAM_IMAGE" >> build.env + - echo "BUILD_DISTRO=$CI_PARAM_DISTRO" >> build.env + - echo "BUILD_PATH_IMAGE=${BUILDPATH}/${IMAGEPATH}" >> build.env + - echo "BUILD_PATH_SDK=${BUILDPATH}/${SDKPATH}" >> build.env + - echo "BUILD_PATH_LICENSE=${BUILDPATH}/${LICENSESPATH}" >> build.env + - echo "FNG_INSTALL_URL=${JOB_URL}${FNG_INSTALL_PATH}" >> build.env + # -------------------------------------------------------------------------------------- # Stage: Infrastructure # -------------------------------------------------------------------------------------- @@ -137,6 +205,31 @@ workflow: - key: ${CI_JOB_NAME}-${BUILD_ARTIFACTS} paths: *artifacts_paths +.build_yocto: + extends: + - .buildbase + needs: [] + variables: + GIT_STRATEGY: none + SETUPSCRIPT: "setup-environment" + LOGPREFIX: "CI:build:" + BUILDPATH: "build-${CI_PARAM_DISTRO}-${CI_PARAM_MACHINE}" + IMAGEBASEPATH: "tmp/deploy/images/" + IMAGEPATH: "${IMAGEBASEPATH}/${CI_PARAM_MACHINE}" + LICENSESPATH: "tmp/deploy/licenses" + SDKPATH: "tmp/deploy/sdk/" + JOB_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/jobs/${CI_JOB_ID}/artifacts/" + FNG_INSTALL_PATH: "${BUILDPATH}/${IMAGEPATH}/${INSTALLSCRIPT}" + before_script: + - *docker_check + - *setup_ssh + - *repo_checkout + script: + - *save_build_env + - *build_script + - *collect_srcrevs + - *dump_install_command + # -------------------------------------------------------------------------------------- # Stage: test # -------------------------------------------------------------------------------------- diff --git a/build-yocto.yml b/build-yocto.yml deleted file mode 100644 index 819d7d72312963145c1e77edfa0204ea05fa66f5..0000000000000000000000000000000000000000 --- a/build-yocto.yml +++ /dev/null @@ -1,97 +0,0 @@ ---- - -# -------------------------------------------------------------------------------------- -# Stage: Build -# -------------------------------------------------------------------------------------- -.collect_srcrevs: &collect_srcrevs - # write all package AUTOREVS to file - - |- - SRCREVS_FILE="${CI_PROJECT_DIR}/${BUILDPATH}/${IMAGEPATH}/BUILD_SRCREVS.log" - if [ -d "$( dirname "${SRCREVS_FILE}" )" ];then - buildhistory-collect-srcrevs > ${SRCREVS_FILE} - echo "${LOGPREFIX} buildhistory-collect-srcrevs:" - cat ${SRCREVS_FILE} - fi - -.dump_install_command: &dump_install_command - # print install instructions - - |- - if [[ ! -z "${INSTALLSCRIPT}" ]]; then - SCRIPT="${CI_PROJECT_DIR}/${BUILDPATH}/${IMAGEPATH}/${INSTALLSCRIPT}" - if [ ! -f "${SCRIPT}" ]; then - echo "Install script missing, searched for '$SCRIPT'" - exit 1 - fi - - if [ "$CI_PROJECT_VISIBILITY" = "public" ];then - cat <<-EOF - ============================== - Install the image: - - FNG="$FNG_INSTALL_URL" - curl --location "\$FNG" | sh -s -- --url="\$(dirname "\$FNG")" - ============================== - EOF - else - cat <<-EOF - ============================== - Install the image: - - export GITLAB_TOKEN=<your_access_token> - FNG="$FNG_INSTALL_URL" - curl --location --header "PRIVATE-TOKEN: \$GITLAB_TOKEN" "\$FNG" \ - | sh -s -- --url="\$(dirname "\$FNG")" - ============================== - EOF - fi - fi - -.build_script: &build_script - # setup build environment - - echo "${LOGPREFIX} Build configuration MACHINE=${CI_PARAM_MACHINE} - DISTRO=${CI_PARAM_DISTRO} IMAGE=${CI_PARAM_IMAGE}" - - source build.env - - echo "${LOGPREFIX} Using build dir ${BUILDPATH}" - - export MACHINE="${CI_PARAM_MACHINE}" - - export DISTRO="${CI_PARAM_DISTRO}" - - export EULA="1" - - source ./"${SETUPSCRIPT}" "${BUILDPATH}" - # start build - - echo -e "section_start:`date +%s`:bitbake_run\r\e[0KBitbake Log" - - echo "${LOGPREFIX} bitbake ${CI_PARAM_IMAGE} -c ${BITBAKE_TASK}" - - bitbake "${CI_PARAM_IMAGE}" -c "${BITBAKE_TASK}" - - echo -e "section_end:`date +%s`:bitbake_run\r\e[0K" - -.save_build_env: &save_build_env - - echo "BUILD_MACHINE=$CI_PARAM_MACHINE" > build.env - - echo "BUILD_IMAGE=$CI_PARAM_IMAGE" >> build.env - - echo "BUILD_DISTRO=$CI_PARAM_DISTRO" >> build.env - - echo "BUILD_PATH_IMAGE=${BUILDPATH}/${IMAGEPATH}" >> build.env - - echo "BUILD_PATH_SDK=${BUILDPATH}/${SDKPATH}" >> build.env - - echo "BUILD_PATH_LICENSE=${BUILDPATH}/${LICENSESPATH}" >> build.env - - echo "FNG_INSTALL_URL=${JOB_URL}${FNG_INSTALL_PATH}" >> build.env - -.build_yocto: - extends: - - .buildbase - needs: [] - variables: - GIT_STRATEGY: none - SETUPSCRIPT: "setup-environment" - LOGPREFIX: "CI:build:" - BUILDPATH: "build-${CI_PARAM_DISTRO}-${CI_PARAM_MACHINE}" - IMAGEBASEPATH: "tmp/deploy/images/" - IMAGEPATH: "${IMAGEBASEPATH}/${CI_PARAM_MACHINE}" - LICENSESPATH: "tmp/deploy/licenses" - SDKPATH: "tmp/deploy/sdk/" - JOB_URL: "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/jobs/${CI_JOB_ID}/artifacts/" - FNG_INSTALL_PATH: "${BUILDPATH}/${IMAGEPATH}/${INSTALLSCRIPT}" - before_script: - - !reference [.docker_check] - - !reference [.setup_ssh] - - !reference [.repo_checkout] - script: - - *save_build_env - - *build_script - - *collect_srcrevs - - *dump_install_command