diff --git a/manifest-build.yml b/manifest-build.yml index 9fa542870e756775d05cb039dd5143fd97161518..9be09ab60d1e5f02671373335f1525055ce7c9d8 100644 --- a/manifest-build.yml +++ b/manifest-build.yml @@ -30,6 +30,7 @@ variables: # CI/CD variable GITLAB_PRIVATE_KEY of the manifest repository. The public key has # been added as a deploy key in GitLab's repository settings for all contained # repositories. + - echo "${LOGPREFIX} Setup SSH" - eval $(ssh-agent -s) - echo "$GITLAB_PRIVATE_KEY" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh @@ -44,6 +45,7 @@ variables: - chmod 644 ~/.ssh/known_hosts .repo_checkout: &repo_checkout + - echo "${LOGPREFIX} Perform repo checkout" - cd ${CI_PROJECT_DIR} - repo init --submodules -u ${CI_REPOSITORY_URL} -b refs/pipelines/${CI_PIPELINE_ID} @@ -56,6 +58,7 @@ variables: 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 @@ -80,19 +83,19 @@ variables: .build_script: &build_script # setup build environment - - echo "Build configuration MACHINE=${CI_PARAM_MACHINE} + - echo "${LOGPREFIX} Build configuration MACHINE=${CI_PARAM_MACHINE} DISTRO=${CI_PARAM_DISTRO} IMAGE=${CI_PARAM_IMAGE}" - 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 "Using build dir ${BUILDPATH}" + - 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 "bitbake ${CI_PARAM_IMAGE} -c ${BITBAKE_TASK}" + - 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" @@ -102,6 +105,7 @@ variables: SETUPSCRIPT: "setup-environment" INSTALLSCRIPTS: "fng-install.sh fngsystem-self-update.sh" BITBAKE_TASK: "build" + LOGPREFIX: "CI:build:" before_script: - *docker_check - *setup_ssh @@ -110,7 +114,6 @@ variables: - *build_script - *collect_srcrevs - *dump_install_command - artifacts: paths: - "${BUILDPATH}/${IMAGEPATH}/*" @@ -118,85 +121,14 @@ variables: reports: dotenv: build.env -.package: - variables: - CI_PARAM_PACKAGE_FTP: "false" - after_script: - - |- - # Package release files - [ -e build.env ] && source build.env - BUILDPATH="build-${BUILD_DISTRO}-${BUILD_MACHINE}" - [ -z "${ARTIFACTS_IMAGE_PATH}" ] && \ - ARTIFACTS_IMAGE_PATH="${BUILDPATH}/${IMAGEBASEPATH}/${BUILD_MACHINE}" - [ -z "${ARTIFACTS_LICENSES_PATH}" ] && \ - ARTIFACTS_LICENSES_PATH="${BUILDPATH}/${LICENSESPATH}" - [ -z "${ARTIFACTS_SDK_PATH}" ] && \ - ARTIFACTS_SDK_PATH="${BUILDPATH}/${SDKPATH}" - - if $CI_PARAM_PACKAGE_FTP; then - UPLOAD_PARAM="" # don't store as gitlab artifact - OUTDIR_BASE="/artifacts-ftp" - else - UPLOAD_PARAM="--outputdir-upload=release" - OUTDIR_BASE="/artifacts" - fi - - # If we are on the master branch and a tag is set - # we tread it as release - if [ -n "$CI_COMMIT_TAG" ];then - outdir="${OUTDIR_BASE}-yocto/Releases" - [ "${BUILD_DISTRO}" = "guf-fngsystem" ] && \ - outdir="${OUTDIR_BASE}-fngsystem" - else - outdir="${OUTDIR_BASE}-yocto/Interne_Releases" - [ "${BUILD_DISTRO}" = "guf-fngsystem" ] && \ - outdir="${OUTDIR_BASE}-fngsystem/CI_Builds" - fi - - script=".gitlab-ci/package_release.py" - [ ! -x "$script" ] && script=".repo/manifests/$script" - [ ! -x "$script" ] && echo "Failed to find package_release script" - - # Image if available - if [ -d "${ARTIFACTS_IMAGE_PATH}" ];then - $script \ - --images-dir="${ARTIFACTS_IMAGE_PATH}" \ - --licenses-dir="${ARTIFACTS_LICENSES_PATH}" \ - --doc-dir=. \ - --outputdir-local=${outdir} \ - $UPLOAD_PARAM - fi - # SDK if available - echo "Check for SDK to upload" - if [ -d "${ARTIFACTS_SDK_PATH}" ];then - echo "SDK path exists, call package_release.py" - $script \ - --sdk-dir=${ARTIFACTS_SDK_PATH} \ - --outputdir-local="${outdir}" - fi - - # Generate AlphaPlan FWR articles if release tag is set - apscript=".gitlab-ci/alphaplan_fwr.py" - - if [ -n "$CI_COMMIT_TAG" ] && \ - [ -d "${ARTIFACTS_IMAGE_PATH}" ] && \ - [[ "${CI_PARAM_PACKAGE_FTP}" == "false" ]];then - # Check if alphaplan fwr script is available - [ ! -x "${apscript}" ] && \ - echo "Failed to find alphaplan_fwr script" && \ - exit 1 - # Call script - ${apscript} \ - --images-dir="${ARTIFACTS_IMAGE_PATH}" \ - --outputdir-local=${outdir} \ - --outputdir-upload=release - fi - .prepare_test: + variables: + LOGPREFIX: "CI:test:" before_script: - *setup_ssh - |- # Copy artifacts to local server for automated tests + echo "${LOGPREFIX} Copy files for automated tests using package_release" .gitlab-ci/package_release.py \ --images-dir="${BUILDPATH}/${IMAGEPATH}" \ --outputdir-local="${DEPLOYPATH_TEST}" diff --git a/manifest-package.yml b/manifest-package.yml new file mode 100644 index 0000000000000000000000000000000000000000..55b721ffc1818b58ef74cf15e844535a970b113e --- /dev/null +++ b/manifest-package.yml @@ -0,0 +1,113 @@ +--- +.package: + variables: + CI_PARAM_PACKAGE_FTP: "false" + LOGPREFIX: "CI:package:" + after_script: + - |- + # Package release files + # TODO: At the moment this script is used for + # - image deployment, + # - sdk build, + # - image and sdk ftp upload + # - and artifact deployment for automated tests. + # Some usecases require individual processing, which leads to + # high script complexity. That should be improved. + + echo "${LOGPREFIX} Assemble build variables" + # We need to source the build.env file which is generated by the + # previous build step. This is a workaround to get the environment + # variables in the after_script step. + [ -e build.env ] && source build.env + BUILDPATH="build-${BUILD_DISTRO}-${BUILD_MACHINE}" + [ -z "${ARTIFACTS_IMAGE_PATH}" ] && \ + ARTIFACTS_IMAGE_PATH="${BUILDPATH}/${IMAGEBASEPATH}/${BUILD_MACHINE}" + [ -z "${ARTIFACTS_LICENSES_PATH}" ] && \ + ARTIFACTS_LICENSES_PATH="${BUILDPATH}/${LICENSESPATH}" + [ -z "${ARTIFACTS_SDK_PATH}" ] && \ + ARTIFACTS_SDK_PATH="${BUILDPATH}/${SDKPATH}" + + if ${CI_PARAM_PACKAGE_FTP}; then + UPLOAD_PARAM="" # don't store as gitlab artifact + OUTDIR_BASE="/artifacts-ftp" + else + UPLOAD_PARAM="--outputdir-upload=release" + OUTDIR_BASE="/artifacts" + fi + + # If we are on the master branch and a tag is set + # we tread it as release + if [ -n "${CI_COMMIT_TAG}" ];then + outdir="${OUTDIR_BASE}-yocto/Releases" + [ "${BUILD_DISTRO}" = "guf-fngsystem" ] && \ + outdir="${OUTDIR_BASE}-fngsystem" + else + outdir="${OUTDIR_BASE}-yocto/Interne_Releases" + [ "${BUILD_DISTRO}" = "guf-fngsystem" ] && \ + outdir="${OUTDIR_BASE}-fngsystem/CI_Builds" + fi + + # Print vars for debugging purposes + echo "${LOGPREFIX} BUILDPATH=${BUILDPATH}" + echo "${LOGPREFIX} ARTIFACTS_IMAGE_PATH=${ARTIFACTS_IMAGE_PATH}" + echo "${LOGPREFIX} ARTIFACTS_LICENSES_PATH=${ARTIFACTS_LICENSES_PATH}" + echo "${LOGPREFIX} ARTIFACTS_SDK_PATH=${ARTIFACTS_SDK_PATH}" + echo "${LOGPREFIX} UPLOAD_PARAM=${UPLOAD_PARAM}" + echo "${LOGPREFIX} outdir=${outdir}" + + # Check if the package_release script is available + script=".gitlab-ci/package_release.py" + # Change script path if ? + [ ! -x "${script}" ] && script=".repo/manifests/${script}" + if [ ! -x "${script}" ]; then + echo "${LOGPREFIX} Failed to find package_release script" + exit 1 + fi + + # Copy image if available + echo "${LOGPREFIX} Check if a image build exists" + if [ -d "${ARTIFACTS_IMAGE_PATH}" ];then + echo "${LOGPREFIX} Image dir found, execute ${script}" + ${script} \ + --images-dir="${ARTIFACTS_IMAGE_PATH}" \ + --licenses-dir="${ARTIFACTS_LICENSES_PATH}" \ + --doc-dir=. \ + --outputdir-local=${outdir} \ + $UPLOAD_PARAM + else + echo "${LOGPREFIX} No image found" + fi + + # Copy SDK if available + echo "${LOGPREFIX} Check if a SDK build exists" + if [ -d "${ARTIFACTS_SDK_PATH}" ];then + echo "${LOGPREFIX} SDK dir found, execute ${script}" + ${script} \ + --sdk-dir=${ARTIFACTS_SDK_PATH} \ + --outputdir-local="${outdir}" + else + echo "${LOGPREFIX} No SDK found" + fi + + # Generate AlphaPlan FWR articles if + # - a release tag is set + # - this is an image build and + # - the files were deployed to local network (drive Z) + apscript=".gitlab-ci/alphaplan_fwr.py" + echo "${LOGPREFIX} Check if AlphaPlan FWR articles need to be generated" + if [ -n "$CI_COMMIT_TAG" ] && [ -d "${ARTIFACTS_IMAGE_PATH}" ] && \ + [[ "${CI_PARAM_PACKAGE_FTP}" == "false" ]];then + echo "${LOGPREFIX} Generate AlphaPlan articles, execute ${apscript}" + # Check if alphaplan fwr script is available + if [ ! -x "${apscript}" ]; then + echo "${LOGPREFIX} Failed to find alphaplan_fwr script" + exit 1 + fi + # Call script + ${apscript} \ + --images-dir="${ARTIFACTS_IMAGE_PATH}" \ + --outputdir-local=${outdir} \ + --outputdir-upload=release + else + echo "${LOGPREFIX} No AlphaPlan FWR articles need to be generated" + fi diff --git a/manifest.yml b/manifest.yml index 477b19a4fb89f0bbd956b0a47789833839485d58..ef407841ac9a93eadeddf81f24d9332e4db5932e 100644 --- a/manifest.yml +++ b/manifest.yml @@ -5,6 +5,7 @@ include: - local: manifest-build.yml - local: common.yml + - local: manifest-package.yml stages: - retrigger @@ -229,6 +230,8 @@ build:merge_request: when: manual allow_failure: true script: + # Workaround: We need a command in the script section to be able to run the + # after_script section of the package step. - echo artifacts: paths: @@ -250,6 +253,8 @@ build:merge_request: when: manual allow_failure: true script: + # Workaround: We need a command in the script section to be able to run the + # after_script section of the package step. - echo timeout: 30m