← Back to team overview

sts-sponsors team mailing list archive

[Merge] ~adam-collard/maas-ci/+git/maas-ci-internal:unify-lander into ~maas-committers/maas-ci/+git/maas-ci-internal:main

 

Adam Collard has proposed merging ~adam-collard/maas-ci/+git/maas-ci-internal:unify-lander into ~maas-committers/maas-ci/+git/maas-ci-internal:main.

Commit message:
[job-lander] Unify lander



Requested reviews:
  MAAS Committers (maas-committers)

For more details, see:
https://code.launchpad.net/~adam-collard/maas-ci/+git/maas-ci-internal/+merge/437621
-- 
Your team MAAS Committers is requested to review the proposed merge of ~adam-collard/maas-ci/+git/maas-ci-internal:unify-lander into ~maas-committers/maas-ci/+git/maas-ci-internal:main.
diff --git a/jobs/launchpad-ci/job-lander.groovy b/jobs/launchpad-ci/job-lander.groovy
index 67829ce..514a283 100644
--- a/jobs/launchpad-ci/job-lander.groovy
+++ b/jobs/launchpad-ci/job-lander.groovy
@@ -1,11 +1,8 @@
-{% import 'launchpad-ci.groovy' as common %}
-{% include 'launchpad-ci-utils.groovy' %}
-
-def makeBuildContextFromJob(job) {
+def createBuildContextFromJob(job) {
     ret_build = {
         def local_job = job
-        def series = '{{ ubuntu_series | default }}'
-        def test_build = makeTestBuild('{{ name }}', series, local_job)
+        def series = local_job.SERIES
+        def test_build = makeTestBuild(local_job.NAME, series, local_job)
         def test_result = test_build.getResult()
         def test_build_url = test_build.getAbsoluteUrl()
         if (test_result != 'SUCCESS') {
@@ -14,7 +11,7 @@ def makeBuildContextFromJob(job) {
             mattermostSend(color: 'red', message: "[${env.JOB_NAME} #${env.BUILD_NUMBER}](${env.BUILD_URL}) :fire: Failed to merge [${local_job.LP_REPO_SRC}:${local_job.LP_BRANCH_SRC} into ${local_job.LP_REPO_DEST}:${local_job.LP_BRANCH_DEST}](${local_job.LP_MP_LINK})\n \n${local_job.LP_COMMIT_MSG}")
         } else {
             try {
-                lock(resource: "{{ name }}-${local_job.LP_BRANCH_DEST}") {
+                lock(resource: "$local_job.NAME-${local_job.LP_BRANCH_DEST}") {
                     script {
                         env.GIT_SSH_COMMAND = "ssh -i $SSHKEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
                     }
@@ -40,43 +37,53 @@ def makeBuildContextFromJob(job) {
 }
 
 pipeline {
-    agent {
-        label '{{ lander_agent_label }}'
-    }
+  agent {
+    label ''
+  }
 
-    options {
-        buildDiscarder(logRotator(daysToKeepStr: '2'))
-        disableConcurrentBuilds()
-    }
+  options {
+    buildDiscarder(logRotator(daysToKeepStr: '2'))
+    disableConcurrentBuilds()
+  }
 
-    stages {
-        stage('Prepare') {
-            steps {
-                cleanWs()
-                {{ common.clone_ci_repo_step() }}
-            }
-        }
+  stages {
+    stage('Prepare') {
+      steps {
+        cleanWs()
+	withCredentials([
+	  file(credentialsId: 'lp-lander-credentials', variable: 'CREDS'),
+	  sshUserPrivateKey(credentialsId: 'launchpad-ci-ssh-key', keyFileVariable: 'SSHKEY', usernameVariable: 'SSHUSER')
+	]) {
+	  sh '''
+	    rm -rf ci maas-ci-internal
+	    export GIT_SSH_COMMAND="ssh -i $SSHKEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
+	    git clone git+ssh://${SSHUSER}@git.launchpad.net/~maas-committers/maas-ci/+git/maas-ci-internal --branch main --depth 1
+	    mv maas-ci-internal/jobs/launchpad-ci ci
+          '''
+	}
+      }
+    }
 
-        stage('Land Branches') {
-            steps {
-                withCredentials([
-                    file(credentialsId: 'lp-lander-credentials', variable: 'CREDS'),
-                    sshUserPrivateKey(credentialsId: 'launchpad-ci-ssh-key', keyFileVariable: 'SSHKEY', usernameVariable: 'SSHUSER')
-                ]) {
-                    script {
-                        env.GIT_SSH_COMMAND = "ssh -i $SSHKEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
-                        def output = run('ci/launchpad --credentials $CREDS mergeable-jobs --limit 1 {{ repo_lp_path }}')
-                        def jobs = parseJobs(output)
-                        if(jobs.size() > 0) {
-                            def builds = [:]
-                            for(job in jobs) {
-                                builds[job.LP_BRANCH_DEST] = makeBuildContextFromJob(job)
-                            }
-                            parallel builds
-                        }
-                    }
-                }
+    stage('Land Branches') {
+      steps {
+        withCredentials([
+          file(credentialsId: 'lp-lander-credentials', variable: 'CREDS'),
+          sshUserPrivateKey(credentialsId: 'launchpad-ci-ssh-key', keyFileVariable: 'SSHKEY', usernameVariable: 'SSHUSER')
+        ]) {
+          script {
+            env.GIT_SSH_COMMAND = "ssh -i $SSHKEY -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"
+            def output = run('ci/launchpad --credentials $CREDS mergeable-jobs maas-ci-internal/jobs/')
+            def jobs = parseJobs(output)
+            if(jobs.size() > 0) {
+              def builds = [:]
+              for(job in jobs) {
+                builds[job.LP_BRANCH_DEST] = createBuildContextFromJob(job)
+              }
+              parallel builds
             }
+          }
         }
+      }
     }
+  }
 }
diff --git a/jobs/launchpad-ci/launchpad b/jobs/launchpad-ci/launchpad
index 1bd8927..2f66a8c 100755
--- a/jobs/launchpad-ci/launchpad
+++ b/jobs/launchpad-ci/launchpad
@@ -112,7 +112,6 @@ def has_test_marker(comment):
     return False
 
 
-
 def generate_mergable_proposals(lp, git_repo):
     approved_proposals = list(git_repo.getMergeProposals(status="Approved"))
     shuffle(approved_proposals)
@@ -135,6 +134,7 @@ def generate_mergable_proposals(lp, git_repo):
 
         yield proposal
 
+
 def should_review(lp, proposal, repo_logger):
     hit_test_marker = False
     reviewed_commits = []
@@ -388,12 +388,18 @@ def handle_reviewable_jobs(args, lp):
 
 def handle_mergable_jobs(args, lp):
     """Check for MPs that can be merged."""
-    repo = get_repository(lp, args.repo_lp_path)
     job_list = []
-    for proposal in islice(generate_mergable_proposals(lp, repo), args.limit):
-        job = get_job_info(proposal)
-        del job["MP"]
-        job_list.append(job)
+    for repo, repo_logger in generate_repos(args.jobs_cfg_dir):
+        git_repo = get_repository(lp, repo.lp_path)
+        if git_repo is None:
+            repo_logger.error(f"Unable to load git repo at {repo.lp_path}")
+            continue
+        for proposal in generate_mergable_proposals(lp, git_repo):
+            job = get_job_info(proposal)
+            del job["MP"]
+            job["NAME"] = repo.name
+            job["SERIES"] = repo.series
+            job_list.append(job)
     print(json.dumps(job_list))
     return 0
 
@@ -522,10 +528,9 @@ def main():
 
     mergeable_jobs_parser = subcommands.add_parser("mergeable-jobs")
     mergeable_jobs_parser.add_argument(
-        "repo_lp_path", help="The path to the repo, for which to get jobs for."
-    )
-    mergeable_jobs_parser.add_argument(
-        "--limit", type=int, default=None, help="Maximum number of jobs to return."
+        "jobs_cfg_dir",
+        type=Path,
+        help="Path to directory containing yaml launchpad-ci configs listing the repos to look for open MPs in.",
     )
     mergeable_jobs_parser.set_defaults(func=handle_mergable_jobs)
 
diff --git a/jobs/launchpad-ci/launchpad-ci.yaml b/jobs/launchpad-ci/launchpad-ci.yaml
index 11a3835..0c6f0ee 100644
--- a/jobs/launchpad-ci/launchpad-ci.yaml
+++ b/jobs/launchpad-ci/launchpad-ci.yaml
@@ -3,7 +3,7 @@
     jobs:
       - '{name}-tester'
       - 'reviewer'
-      - '{name}-lander'
+      - 'lander'
 
 - job:
     name: 'reviewer'
@@ -61,14 +61,18 @@
     post_test_actions: ''
 
 
-- job-template:
-    name: '{name}-lander'
+- job:
+    name: 'lander'
     description: |
-      Launchpad CI lander for {name}.
+      Launchpad CI lander.
 
       Maintained in lp:~maas-committers/maas-ci/+git/maas-ci-internal.
     project-type: pipeline
-    dsl: !include-jinja2: job-lander.groovy
+    # Can't use #!include-jinja2 on a job, just a job-template since
+    # a job doesn't have context variables to render the template
+    dsl: !include-raw:
+           - launchpad-ci-utils.groovy
+           - job-lander.groovy
     triggers:
         - timed: 'H/2 * * * *'
 
@@ -82,5 +86,6 @@
       All the jobs related to {name}.
     view-type: list
     job-name:
-      - '{name}-lander'
+      - 'reviewer'
+      - 'lander'
       - '{name}-tester'

Follow ups