sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #05298
[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