diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9a4503b9a97cac430cab9d2b052a92a5f70f6191..487fb51a375ee628f6abe1d3c9360f705e977fd4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -18,8 +18,8 @@ default: stages: - analyze - - deploy-test - deploy + - integrate workflow: rules: @@ -58,58 +58,83 @@ yamllint: # Stage: deploy-test # --------------------------------------------------------------------------------------- deploy-foobar-manifest: - stage: deploy-test - # when: manual - allow_failure: true + stage: deploy + variables: script: - cd ${CI_PROJECT_DIR} - - if [[ "$CI_COMMIT_BRANCH" == "master" ]]; then MERGE="--merge"; else MERGE=""; fi - PROJECT_ROOT="${CI_PROJECT_ROOT_NAMESPACE}/yocto/infrastructure/ci-test" - ./deploy_gitlab_ci.py --gitlab-url=${CI_SERVER_URL} --token=${GITBOT_TOKEN} --submodule=.gitlab-ci --revision=${CI_COMMIT_SHA} - ${MERGE} --manifest-project=${PROJECT_ROOT}/minimal-manifest ${PROJECT_ROOT}/minimal-foo ${PROJECT_ROOT}/minimal-bar + - ./create_gitlab_ci_jobs.py + --branch="integrate/${CI_PROJECT_NAME}/${CI_COMMIT_REF_NAME}" + --manifest-project=${PROJECT_ROOT}/minimal-manifest + ${PROJECT_ROOT}/minimal-foo + ${PROJECT_ROOT}/minimal-bar + > integration-jobs.yml + artifacts: + paths: + - integration-jobs.yml + + +trigger-child: + stage: integrate + trigger: + include: + - artifact: integration-jobs.yml + job: deploy-foobar-manifest + + +# project: SECO-Northern-Europe/yocto/infrastructure/ci-test/minimal-bar +# branch: "integrate/${CI_PROJECT_NAME}/${CI_COMMIT_REF_NAME}" +# strategy: depend +# +# minimal-bar: *integrate +# minimal-foo: *integrate + # --------------------------------------------------------------------------------------- # Stage: deploy # --------------------------------------------------------------------------------------- -.deploy: &deploy - stage: deploy - when: manual - allow_failure: true - script: - - cd ${CI_PROJECT_DIR} - - if [[ "$CI_COMMIT_BRANCH" == "master" ]]; then MERGE="--merge"; else MERGE=""; fi - - ./deploy_gitlab_ci.py - --gitlab-url=${CI_SERVER_URL} - --token=${GITBOT_TOKEN} - --project=${CI_PROJECT_ROOT_NAMESPACE}/${CI_JOB_NAME} - --submodule=.gitlab-ci - --revision=${CI_COMMIT_SHA} - ${MERGE} - -3rd-party/kuk/uboot-imx-kuk: *deploy -kernel/linux-guf: *deploy -kernel/linux-imx-kuk: *deploy -kernel/modules/egalaxi2c: *deploy -kernel/modules/gfplatdetect: *deploy -tools/gf-emc-test-suite: *deploy -tools/gf-productiontests: *deploy -tools/gfeeprom: *deploy -tools/gfxml2dto: *deploy -tools/guf-show-demo: *deploy -tools/libmdb: *deploy -tools/touchcal-conv: *deploy -tools/xconfig: *deploy -yocto/config: *deploy -yocto/infrastructure/ci-test/minimal-bar: *deploy -yocto/infrastructure/ci-test/minimal-foo: *deploy -yocto/infrastructure/ci-test/minimal-manifest: *deploy -yocto/layers/meta-guf-distro: *deploy -yocto/layers/meta-guf-machine: *deploy -yocto/manifest: *deploy +# .deploy: &deploy +# stage: deploy +# when: manual +# allow_failure: true +# script: +# - cd ${CI_PROJECT_DIR} +# - if [[ "$CI_COMMIT_BRANCH" == "master" ]]; then MERGE="--merge"; +# else MERGE=""; fi +# - ./deploy_gitlab_ci.py +# --gitlab-url=${CI_SERVER_URL} +# --token=${GITBOT_TOKEN} +# --project=${CI_PROJECT_ROOT_NAMESPACE}/${CI_JOB_NAME} +# --submodule=.gitlab-ci +# --revision=${CI_COMMIT_SHA} +# ${MERGE} +# + +# 3rd-party/kuk/uboot-imx-kuk: *deploy +# kernel/linux-guf: *deploy +# kernel/linux-imx-kuk: *deploy +# kernel/modules/egalaxi2c: *deploy +# kernel/modules/gfplatdetect: *deploy +# tools/gf-emc-test-suite: *deploy +# tools/gf-productiontests: *deploy +# tools/gfeeprom: *deploy +# tools/gfxml2dto: *deploy +# tools/guf-show-demo: *deploy +# tools/libmdb: *deploy +# tools/touchcal-conv: *deploy +# tools/xconfig: *deploy +# yocto/config: *deploy +# yocto/infrastructure/ci-test/minimal-bar: *deploy +# yocto/infrastructure/ci-test/minimal-foo: *deploy +# yocto/infrastructure/ci-test/minimal-manifest: *deploy +# yocto/layers/meta-guf-distro: *deploy +# yocto/layers/meta-guf-machine: *deploy +# yocto/manifest: *deploy diff --git a/create_gitlab-ci_jobs.py b/create_gitlab-ci_jobs.py new file mode 100755 index 0000000000000000000000000000000000000000..cdffe2da7d26672954e663b399c48302ac248289 --- /dev/null +++ b/create_gitlab-ci_jobs.py @@ -0,0 +1,72 @@ +#!/usr/bin/env python3 +import argparse +import logging +import sys + +from ruamel.yaml import YAML + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument( + "--project", + "--manifest-project", + help="""name of the GitLab project""", + dest="project", + ) + parser.add_argument( + "--branch", + help="""integration branch""", + dest="branch", + required=True, + ) + parser.add_argument( + "--merge", + help="""if set, perform merge after integration""", + dest="merge", + action="store_true", + required=False, + default=False, + ) + parser.add_argument( + "projects", + help="""List of projects the change should be deployed to additionally + to the manifest project given as named parameter.""", + nargs="*", + ) + parser.add_argument( + "-v", + "--verbose", + action="store_true", + help="""Increase verbosity.""", + ) + + args, _ = parser.parse_known_args() + if args.verbose: + logging.basicConfig(level=logging.DEBUG) + + logging.debug("Integrate into: %s", args.project) + + d = dict() + integration_jobs = [] + for p in args.projects: + jobname = "integrate-{}".format(p.split("/")[-1]) + integration_jobs.append(jobname) + d[jobname] = { + "stage": "integrate", + "trigger": { + "include": { + "project": p, + "branch": args.branch, + "strategy": "depend", + } + }, + } + logging.debug(d) + + yaml = YAML() + yaml.dump(d, sys.stdout) + + +if __name__ == "__main__": + main()