From b097a25350e1b4192c0b84aa6e7bb5a77477e3b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20H=C3=B6ppner?= <jonas.hoeppner@garz-fricke.com> Date: Mon, 21 Mar 2022 13:04:34 +0100 Subject: [PATCH] CI: Generate .gitlab-ci.yml with include commands in deploy step This change should be reverted after once used. It is needed to initially add the include .gitlab-ci.yml in all subprojects. --- deploy_gitlab_ci.py | 71 +++++- manifest-build.yml | 166 ++++++++++++++ manifest.yml | 516 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 752 insertions(+), 1 deletion(-) create mode 100644 manifest-build.yml create mode 100644 manifest.yml diff --git a/deploy_gitlab_ci.py b/deploy_gitlab_ci.py index 24df87b0..4f2445f9 100755 --- a/deploy_gitlab_ci.py +++ b/deploy_gitlab_ci.py @@ -12,11 +12,77 @@ from get_merge_requests import get_merge_requests from update_submodule import update_submodule from update_gitlab_ci import update_gitlab_ci_include +from ruamel.yaml import YAML + def update_rev_in_gitlab_ci(repo, submodule_project, submodule_revision): # Add changed revision also to .gitlab-ci.yml gitlab_ci_yml = os.path.join(repo.working_tree_dir, ".gitlab-ci.yml") + + # ====================================== + # Hack to deploy the .gitlab-ci.yml which does the include + # to the child project + logging.debug("Origin: %s", repo.remotes.origin.url) + + # Contains the base file to be used in the subprojects + if "ci-test" in repo.remotes.origin.url: + if "manifest" in repo.remotes.origin.url: + include_file = "foobar-manifest.yml" + else: + include_file = "foobar-manifest-integration.yml" + else: + if "manifest" in repo.remotes.origin.url: + include_file = "manifest.yml" + else: + include_file = "manifest-integration.yml" + + # ----------------------------------- + # Adapt content in the include file + # ----------------------------------- + # Read values from existing file + yaml = YAML() + with open(gitlab_ci_yml, "r", encoding="utf8") as fp: + data = yaml.load(fp) + + logging.debug("Yaml: %s", data) + + try: + masterbranch = data["variables"]["MASTER_BRANCH_PROJECT"] + logging.debug("Masterbranch %s", masterbranch) + except KeyError: + masterbranch = None + try: + recipe = data["variables"]["BB_RECIPE_NAME"] + logging.debug("Recipe %s", recipe) + except KeyError: + recipe = None + + # ----------------------------------- + with open(gitlab_ci_yml, "w", encoding="utf8") as fp: + fp.write( + """--- +# --------------------------------------------------------------------------------------- +# Include the default CI steps from the gitlab-ci repo +# --------------------------------------------------------------------------------------- +include: + - project: '${CI_PROJECT_ROOT_NAMESPACE}/yocto/infrastructure/gitlab-ci' + ref: 49cc4204323bca76190e5ffae1a7d5627157c073 +""" + ) + fp.write(" file: '{}'\n".format(include_file)) + if masterbranch is not None or recipe is not None: + fp.write("\nvariables:\n") + if masterbranch is not None: + fp.write(" MASTER_BRANCH_PROJECT: {}\n".format(masterbranch)) + if recipe is not None: + fp.write(" BB_RECIPE_NAME: {}\n".format(recipe)) + + # ----------------------------------- + repo.git.add(gitlab_ci_yml) + + # ====================================== + if update_gitlab_ci_include( gitlab_ci_yml, submodule_project.web_url.split("//")[1].split("/", 1)[1], @@ -24,6 +90,9 @@ def update_rev_in_gitlab_ci(repo, submodule_project, submodule_revision): ): repo.git.add(gitlab_ci_yml) + with open(gitlab_ci_yml, "r", encoding="utf8") as fp: + logging.debug(fp.read()) + def deploy_into(project, submodule, revision, branch, replace_existing_branch=False): """Update the submodule and include refs to the submodule in the given project. @@ -190,7 +259,7 @@ def main(): sys.exit(0) # The manifest needs to be merged at last - merge_requests.append(merge_request_manifest) + merge_requests.append(merge_request_manifest) for mr in merge_requests: logging.debug("Merge %s", mr) # Wait until GitLab has checked merge status diff --git a/manifest-build.yml b/manifest-build.yml new file mode 100644 index 00000000..3dace580 --- /dev/null +++ b/manifest-build.yml @@ -0,0 +1,166 @@ +--- +variables: + 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/" + DEPLOYPATH_TEST: "/artifacts/${CI_JOB_ID}/" + GIT_BASE_URL: "git@${CI_SERVER_HOST}:${CI_PROJECT_ROOT_NAMESPACE}" + TESTS_GIT_URL: "${GIT_BASE_URL}/yocto/tests.git" + +.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 + - eval $(ssh-agent -s) + - echo "$JENKINSGUF_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - + - mkdir -p ~/.ssh + - chmod 700 ~/.ssh + # add content of variable SSH_KNOWN_HOSTS to known hosts + # https://docs.gitlab.com/ee/ci/ssh_keys/#verifying-the-ssh-host-keys + - echo "$SSH_KNOWN_HOSTS" >> ~/.ssh/known_hosts + - chmod 644 ~/.ssh/known_hosts + +.repo_checkout: &repo_checkout + - cd ${CI_PROJECT_DIR} + - repo init --submodules -u ${CI_REPOSITORY_URL} + -b refs/pipelines/${CI_PIPELINE_ID} + - repo sync --detach --current-branch --no-tags --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} + cat ${SRCREVS_FILE} + fi + +.dump_install_command: &dump_install_command + # print install instructions + - |- + for i in ${INSTALLSCRIPTS};do + SCRIPT="${CI_PROJECT_DIR}/${BUILDPATH}/${IMAGEPATH}/${i}" + if [[ -f "${SCRIPT}" ]]; then + cat <<-EOF + ============================== + Install the image: + + export GITLAB_TOKEN=<your_access_token> + FNG="${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/jobs/${CI_JOB_ID}/artifacts/${BUILDPATH}/${IMAGEPATH}/${i}" + curl --location --header "PRIVATE-TOKEN: \$GITLAB_TOKEN" "\$FNG" \ + | sh -s -- --url="\$(dirname "\$FNG")" + ============================== + EOF + fi + done + +.build_script: &build_script + # setup build environment + - echo "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}" + - 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}" + - bitbake "${CI_PARAM_IMAGE}" -c "${BITBAKE_TASK}" + - echo -e "section_end:`date +%s`:bitbake_run\r\e[0K" + +.build: + variables: + GIT_STRATEGY: none + SETUPSCRIPT: "setup-environment" + INSTALLSCRIPTS: "fng-install.sh fngsystem-self-update.sh" + BITBAKE_TASK: "build" + before_script: + - *setup_ssh + - *repo_checkout + script: + - *build_script + - *collect_srcrevs + - *dump_install_command + + artifacts: + paths: + - "${BUILDPATH}/${IMAGEPATH}/*" + - "${BUILDPATH}/${LICENSESPATH}/**/license.manifest" + 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 + + # Generate AlphaPlan FWR articles if release tag is set + if [ -n "$CI_COMMIT_TAG" ] && \ + [[ "${CI_PARAM_PACKAGE_FTP}" == "false" ]];then + UPLOAD_PARAM="${UPLOAD_PARAM} --generate-fwr-articles" + 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 + if [ -d "${ARTIFACTS_SDK_PATH}" ];then + $script \ + --sdk-dir=${ARTIFACTS_SDK_PATH} \ + --outputdir-local="${outdir}" + fi + +.prepare_test: + before_script: + - *setup_ssh + - |- + # Copy artifacts to local server for automated tests + .gitlab-ci/package_release.py \ + --images-dir="${BUILDPATH}/${IMAGEPATH}" \ + --outputdir-local="${DEPLOYPATH_TEST}" diff --git a/manifest.yml b/manifest.yml new file mode 100644 index 00000000..e06e6f04 --- /dev/null +++ b/manifest.yml @@ -0,0 +1,516 @@ +# -------------------------------------------------------------------------------------- +# Global +# -------------------------------------------------------------------------------------- +--- +include: + - local: manifest-build.yml + +stages: + - retrigger + - prepare + - build + - test + - deploy + - uploadftp + +variables: + # CI_IMAGES_BASEPATH: Environment variable configure in gitlab + CI_IMAGES_PATH: ${CI_IMAGES_BASEPATH}/ci-images + CI_IMAGES_REV: 44965ccdd847f1e077670f49d546047f8ad0110c + CI_IMAGE_PYTHON: "${CI_IMAGES_PATH}/python/3.9:${CI_IMAGES_REV}" + CI_IMAGE_YOCTO: "${CI_IMAGES_PATH}/yocto-build/ubuntu-20.04:${CI_IMAGES_REV}" + # The master branch is hardcoded here, because it cannot be determined + # automatically. Has to be modified for new branches, e.g. new Yocto + # versions or fix releases. + MASTER_BRANCH: dunfell + # Default image and distro + CI_PARAM_IMAGE: guf-image + CI_PARAM_DISTRO: guf-wayland + +workflow: + rules: + # Explicitly allow externally triggered pipelines in every case + - if: $CI_PIPELINE_SOURCE == "pipeline" || $CI_PIPELINE_SOURCE == "api" + # Do not run pipelines for merge requests + - if: $CI_MERGE_REQUEST_IID + when: never + # Do not run pipelines on forked projects + # (use id instead of name because of rename) + - if: $CI_PROJECT_ID != "17852514" + when: never + # Do not run pipelines on integration branches, except from gitlab-ci repo + - if: $CI_COMMIT_REF_NAME =~ /^integrate\/.*/ && + $CI_COMMIT_REF_NAME !~ /^integrate\/gitlab-ci\/.*/ + when: never + # In all other cases, run the pipeline automatically + - when: always + +# -------------------------------------------------------------------------------------- +# Common infrastructure settings +# -------------------------------------------------------------------------------------- +.infrastructure: + tags: + - infrastructure + timeout: 10m + image: "${CI_IMAGE_PYTHON}" + needs: [] + variables: + # Include git submodules + GIT_SUBMODULE_STRATEGY: recursive + +# -------------------------------------------------------------------------------------- +# Stage: retrigger +# -------------------------------------------------------------------------------------- +retrigger: + extends: .infrastructure + stage: retrigger + rules: + - if: $CI_COMMIT_REF_NAME == $MASTER_BRANCH && $CI_PIPELINE_SOURCE != "api" + script: + - PROJECTS=$( + .gitlab-ci/get_manifest_projects.py + --manifest=default.xml + --remote=seco-north + --concat-namespaces + ) + - echo -e "Projects:\n${PROJECTS}" + - for PROJECT in ${PROJECTS}; do + .gitlab-ci/retrigger_mr_pipeline_jobs.py + --gitlab-url=${CI_SERVER_URL} + --token=${GITBOT_TOKEN} + --project=${PROJECT} + --state=opened + --target-branch=${MASTER_BRANCH} + --job=check + ; + done + +# -------------------------------------------------------------------------------------- +# Stage: prepare +# -------------------------------------------------------------------------------------- +yamllint: + extends: .infrastructure + stage: prepare + rules: + - if: $CI_COMMIT_REF_NAME != $MASTER_BRANCH || $CI_PIPELINE_SOURCE == "api" + script: + - yamllint .*.yml + +changelog: + stage: prepare + rules: + - if: $CI_COMMIT_REF_NAME != $MASTER_BRANCH || $CI_PIPELINE_SOURCE == "api" + tags: + - infrastructure + variables: + IMAGE_PATH: ${CI_IMAGES_BASEPATH}/changelog-generator + IMAGE_REVISION: 2fd56690a5dabde6eda101182e8359f1c3609664 + image: + name: "${IMAGE_PATH}:${IMAGE_REVISION}" + # set entrypoint to noop to be able to run from script + entrypoint: [""] + script: "changelog_generator.py --branch ${MASTER_BRANCH} > changelog.md" + artifacts: + expire_in: 4 weeks + paths: + - "changelog.md" + +# -------------------------------------------------------------------------------------- +# Stage: build +# -------------------------------------------------------------------------------------- +.buildbase: + tags: + - builds + timeout: 8h + interruptible: true + image: + name: "${CI_IMAGE_YOCTO}" + # Override entrypoint so we can pass --id to set the UID and GID for the + # user that is created in the container. This is a feature of the + # crops/poky images. See poky-entry.py for details. + entrypoint: + - "/usr/bin/distro-entry.sh" + - "/usr/bin/dumb-init" + - "--" + - "/usr/bin/poky-entry.py" + - "--id=118:998" + artifacts: + expire_in: 4 weeks + +.buildimage: + extends: + - .buildbase + - .build + rules: + - if: $CI_COMMIT_REF_NAME != $MASTER_BRANCH || $CI_PIPELINE_SOURCE == "api" + needs: [] + +.buildfng: + extends: + - .buildimage + variables: + CI_PARAM_IMAGE: fngsystem-image + CI_PARAM_DISTRO: guf-fngsystem + +build:merge_request: + extends: .infrastructure + stage: build + timeout: 1h + rules: + - if: $CI_COMMIT_REF_NAME == $MASTER_BRANCH && $CI_PIPELINE_SOURCE != "api" + script: + - cd ${CI_PROJECT_DIR} + # Get pipeline for merge request + - MR_PIPELINE=$(.gitlab-ci/get_pipelines.py + --gitlab-url=${CI_SERVER_URL} + --token=${GITBOT_TOKEN} + --project=${CI_PROJECT_PATH} + --commit=${CI_COMMIT_SHA} + --ref=^${MASTER_BRANCH} || true | head -1) + # If pipeline exists, mirror its result + - if [ ! -z "${MR_PIPELINE}" ]; then + .gitlab-ci/mirror_pipeline_result.py + --gitlab-url=${CI_SERVER_URL} + --token=${GITBOT_TOKEN} + --project=${CI_PROJECT_PATH} + --pipeline=${MR_PIPELINE} + # If no pipeline found, trigger a new one on the master + - else + .gitlab-ci/trigger_pipeline.py + --gitlab-url=${CI_SERVER_URL} + --token=${GITBOT_TOKEN} + --project=${CI_PROJECT_PATH} + --ref=${MASTER_BRANCH} + - fi + +.buildsdk: + extends: + - .buildimage + - .package + stage: build + rules: + - if: $CI_COMMIT_REF_NAME != $MASTER_BRANCH || $CI_PIPELINE_SOURCE == "api" + when: manual + allow_failure: true + variables: + BITBAKE_TASK: "populate_sdk" + artifacts: + paths: + - "${BUILDPATH}/${SDKPATH}/*.manifest" + - "${BUILDPATH}/${SDKPATH}/*.json" + reports: + dotenv: package.env + +# --------------------------------------------------------------------------------------- +# Stage: test +# --------------------------------------------------------------------------------------- +.test: + extends: + - .infrastructure + - .prepare_test + timeout: 1h + rules: + - if: $CI_COMMIT_REF_NAME != $MASTER_BRANCH || $CI_PIPELINE_SOURCE == "api" + when: manual + allow_failure: true + variables: + # Include git submodules + GIT_SUBMODULE_STRATEGY: recursive + CI_PARAM_TEST_SUITE: '{platform}.jinja2' + CI_PARAM_EXTRA: --nop + artifacts: + when: always + paths: + - "results/**" + reports: + junit: results/results-*.xml + after_script: + - rm -r "${DEPLOYPATH_TEST}" + + script: + - |- + # Submit tests to lava server + RELEASE=$(ls ${DEPLOYPATH_TEST}/) + INSTALLSCRIPT_ABS="$DEPLOYPATH_TEST/$RELEASE/$CI_PARAM_MACHINE/fng-install.sh" + FNG_INSTALL_URL="${ARTIFACTS_HOST_URL}/${INSTALLSCRIPT_ABS#/*/}" + .gitlab-ci/submit_test.py \ + --fng-install "${FNG_INSTALL_URL}" \ + --name \ + "Gitlab build test ${CI_PARAM_MACHINE} ${RELEASE} ${CI_PIPELINE_ID}" \ + --results-path "results" \ + --test-repo ${TESTS_GIT_URL} \ + --test-repo-branch ${MASTER_BRANCH} \ + --test-plan ${CI_PARAM_TEST_SUITE} \ + ${CI_PARAM_EXTRA} \ + ${CI_PARAM_PLATFORMS} + +# -------------------------------------------------------------------------------------- +# Stage: deploy +# -------------------------------------------------------------------------------------- +.deployimage: + extends: + - .infrastructure + - .package + rules: + - if: $CI_COMMIT_REF_NAME != $MASTER_BRANCH || $CI_PIPELINE_SOURCE == "api" + when: manual + allow_failure: true + script: + - echo + artifacts: + paths: + - release/**/**/* + reports: + dotenv: package.env + +# -------------------------------------------------------------------------------------- +# Stage: uploadftp +# -------------------------------------------------------------------------------------- +.uploadftp: + variables: + CI_PARAM_PACKAGE_FTP: "true" + extends: + - .infrastructure + - .package + rules: + - if: $CI_COMMIT_TAG + when: manual + allow_failure: true + script: + - echo + +.uploadsdkftp: + variables: + ARTIFACTS_SDK_PATH: "$LOCALDIR/$BUILD_MACHINE/sdk" + +# --------------------------------------------------------------------------------------- +# Actual jobs +# --------------------------------------------------------------------------------------- + +build:imx6guf: + extends: .buildimage + stage: build + variables: + CI_PARAM_MACHINE: imx6guf + +build:imx6ullguf: + extends: .buildimage + stage: build + variables: + CI_PARAM_MACHINE: imx6ullguf + +build:imx8mguf: + extends: .buildimage + stage: build + variables: + CI_PARAM_MACHINE: imx8mguf + +build:imx8mpguf: + extends: .buildimage + stage: build + variables: + CI_PARAM_MACHINE: imx8mpguf + +build:imx6guf:fngsystem: + extends: .buildfng + stage: build + variables: + CI_PARAM_MACHINE: imx6guf + +build:imx6ullguf:fngsystem: + extends: .buildfng + stage: build + variables: + CI_PARAM_MACHINE: imx6ullguf + +build:imx8mguf:fngsystem: + extends: .buildfng + stage: build + variables: + CI_PARAM_MACHINE: imx8mguf + +build:imx8mpguf:fngsystem: + extends: .buildfng + stage: build + variables: + CI_PARAM_MACHINE: imx8mpguf + +# ------------------------------------------------------------------------------------- + +buildsdk:imx6guf: + extends: .buildsdk + stage: build + variables: + CI_PARAM_MACHINE: imx6guf + +buildsdk:imx6ullguf: + extends: .buildsdk + stage: build + variables: + CI_PARAM_MACHINE: imx6ullguf + +buildsdk:imx8mguf: + extends: .buildsdk + stage: build + variables: + CI_PARAM_MACHINE: imx8mguf + +buildsdk:imx8mpguf: + extends: .buildsdk + stage: build + variables: + CI_PARAM_MACHINE: imx8mpguf + +# ------------------------------------------------------------------------------------- + +deployimage:imx6guf: + extends: .deployimage + stage: deploy + needs: ["build:imx6guf", "changelog"] + +deployimage:imx6ullguf: + extends: .deployimage + stage: deploy + needs: ["build:imx6ullguf", "changelog"] + +deployimage:imx8mguf: + extends: .deployimage + stage: deploy + needs: ["build:imx8mguf", "changelog"] + +deployimage:imx8mpguf: + extends: .deployimage + stage: deploy + needs: ["build:imx8mpguf", "changelog"] + +deployimage:imx6guf:fngsystem: + extends: .deployimage + stage: deploy + needs: ["build:imx6guf:fngsystem", "changelog"] + +deployimage:imx6ullguf:fngsystem: + extends: .deployimage + stage: deploy + needs: ["build:imx6ullguf:fngsystem", "changelog"] + +deployimage:imx8mguf:fngsystem: + extends: .deployimage + stage: deploy + needs: ["build:imx8mguf:fngsystem", "changelog"] + +deployimage:imx8mpguf:fngsystem: + extends: .deployimage + stage: deploy + needs: ["build:imx8mpguf:fngsystem", "changelog"] + +# ------------------------------------------------------------------------------------- + +uploadftp:imx6guf: + extends: + - .uploadftp + - .uploadsdkftp + stage: uploadftp + needs: ["build:imx6guf", "buildsdk:imx6guf", "changelog"] + +uploadftp:imx6ullguf: + extends: + - .uploadftp + - .uploadsdkftp + stage: uploadftp + needs: ["build:imx6ullguf", "buildsdk:imx6ullguf", "changelog"] + +uploadftp:imx8mguf: + extends: + - .uploadftp + - .uploadsdkftp + stage: uploadftp + needs: ["build:imx8mguf", "buildsdk:imx8mguf", "changelog"] + +uploadftp:imx8mpguf: + extends: + - .uploadftp + - .uploadsdkftp + stage: uploadftp + needs: ["build:imx8mpguf", "buildsdk:imx8mpguf", "changelog"] + +uploadftp:imx6guf:fngsystem: + extends: .uploadftp + stage: uploadftp + needs: ["build:imx6guf:fngsystem", "changelog"] + +uploadftp:imx6ullguf:fngsystem: + extends: .uploadftp + stage: uploadftp + needs: ["build:imx6ullguf:fngsystem", "changelog"] + +uploadftp:imx8mguf:fngsystem: + extends: .uploadftp + stage: uploadftp + needs: ["build:imx8mguf:fngsystem", "changelog"] + +uploadftp:imx8mpguf:fngsystem: + extends: .uploadftp + stage: uploadftp + needs: ["build:imx8mpguf:fngsystem", "changelog"] + +# ------------------------------------------------------------------------------------- + +platformtest:imx6guf: + extends: .test + stage: test + needs: + - job: build:imx6guf + variables: + CI_PARAM_MACHINE: imx6guf + CI_PARAM_PLATFORMS: santaro santoka santino santino-lt + +platformtest:imx6ullguf: + extends: .test + stage: test + needs: + - job: build:imx6ullguf + variables: + CI_PARAM_MACHINE: imx6ullguf + CI_PARAM_PLATFORMS: nallino + +platformtest:imx8mguf: + extends: .test + stage: test + needs: + - job: build:imx6ullguf + variables: + CI_PARAM_MACHINE: imx8mguf + CI_PARAM_PLATFORMS: tanaro + +smoketest:imx6guf: + extends: .test + stage: test + needs: + - job: build:imx6guf + variables: + CI_PARAM_MACHINE: imx6guf + CI_PARAM_PLATFORMS: imx6guf + CI_PARAM_TEST_SUITE: boot.jinja2 + CI_PARAM_EXTRA: --all-devices + +smoketest:imx6ullguf: + extends: .test + stage: test + needs: + - job: build:imx6ullguf + variables: + CI_PARAM_MACHINE: imx6ullguf + CI_PARAM_PLATFORMS: imx6ullguf + CI_PARAM_TEST_SUITE: boot.jinja2 + CI_PARAM_EXTRA: --all-devices + +smoketest:imx8mguf: + extends: .test + stage: test + needs: + - job: build:imx8mguf + variables: + CI_PARAM_MACHINE: imx8mguf + CI_PARAM_PLATFORMS: imx8mguf + CI_PARAM_TEST_SUITE: boot.jinja2 + CI_PARAM_EXTRA: --all-devices -- GitLab