Package commands :: Module rawhide_to_release
[hide private]
[frames] | no frames]

Source Code for Module commands.rawhide_to_release

  1  import click 
  2  from sqlalchemy import func 
  3  from sqlalchemy.orm import joinedload 
  4   
  5  from copr_common.enums import StatusEnum 
  6  from coprs import db 
  7  from coprs import models 
  8  from coprs.logic import coprs_logic, actions_logic, builds_logic, packages_logic 
  9   
 10   
 11  @click.command() 
 12  @click.argument( 
 13      "rawhide_chroot", 
 14      required=True 
 15  ) 
 16  @click.argument( 
 17      "dest_chroot", 
 18      required=True 
 19  ) 
 20  @click.option( 
 21      "--retry-forked/--no-retry-forked", 
 22      default=False, 
 23      help=( 
 24          "Generate actions for backend also for already forked builds, useful " 
 25          "e.g. when previous run of this command failed." 
 26      ) 
 27  ) 
28 -def rawhide_to_release(rawhide_chroot, dest_chroot, retry_forked):
29 """ 30 Branching 31 """ 32 return rawhide_to_release_function(rawhide_chroot, dest_chroot, 33 retry_forked)
34
35 -def rawhide_to_release_function(rawhide_chroot, dest_chroot, retry_forked):
36 mock_chroot = coprs_logic.MockChrootsLogic.get_from_name(dest_chroot).first() 37 if not mock_chroot: 38 print("Given chroot does not exist. Please run:") 39 print(" sudo python3 manage.py create-chroot {}".format(dest_chroot)) 40 return 41 42 mock_rawhide_chroot = coprs_logic.MockChrootsLogic.get_from_name(rawhide_chroot).first() 43 if not mock_rawhide_chroot: 44 print("Given rawhide chroot does not exist. Didnt you mistyped?:") 45 print(" {}".format(rawhide_chroot)) 46 return 47 48 coprs_query = ( 49 coprs_logic.CoprsLogic.get_all() 50 .join(models.CoprChroot) 51 .filter(models.Copr.follow_fedora_branching == True) 52 .filter(models.CoprChroot.mock_chroot == mock_rawhide_chroot) 53 .options(joinedload('copr_chroots').joinedload('mock_chroot')) 54 ) 55 56 for copr in coprs_query: 57 print("Handling builds in copr '{}', chroot '{}'".format( 58 copr.full_name, mock_rawhide_chroot.name)) 59 turn_on_the_chroot_for_copr(copr, rawhide_chroot, mock_chroot) 60 61 data = {"projectname": copr.name, 62 "ownername": copr.owner_name, 63 "rawhide_chroot": rawhide_chroot, 64 "dest_chroot": dest_chroot, 65 "builds": []} 66 67 latest_pkg_builds_in_rawhide = ( 68 db.session.query( 69 func.max(models.Build.id), 70 ) 71 .join(models.BuildChroot) 72 .join(models.Package) 73 .filter(models.BuildChroot.mock_chroot_id == mock_rawhide_chroot.id) 74 .filter(models.BuildChroot.status == StatusEnum("succeeded")) 75 .filter(models.Package.copr_dir == copr.main_dir) 76 .group_by(models.Package.name) 77 ) 78 79 fork_builds = ( 80 db.session.query(models.Build) 81 .options(joinedload('build_chroots').joinedload('mock_chroot')) 82 .filter(models.Build.id.in_(latest_pkg_builds_in_rawhide.subquery())) 83 ).all() 84 85 86 # no builds to fork in this copr 87 if not len(fork_builds): 88 continue 89 90 for build in fork_builds: 91 chroot_exists = mock_chroot in build.chroots 92 93 if chroot_exists and not retry_forked: 94 # this build should already be forked 95 continue 96 97 # rbc means rawhide_build_chroot (we needed short variable) 98 rbc = None 99 for rbc in build.build_chroots: 100 if rbc.mock_chroot == mock_rawhide_chroot: 101 break 102 103 if not chroot_exists: 104 # forked chroot may already exists, e.g. from prevoius 105 # 'rawhide-to-release-run' 106 dest_build_chroot = models.BuildChroot(**rbc.to_dict()) 107 dest_build_chroot.mock_chroot_id = mock_chroot.id 108 dest_build_chroot.mock_chroot = mock_chroot 109 dest_build_chroot.status = StatusEnum("forked") 110 db.session.add(dest_build_chroot) 111 112 if rbc.result_dir: 113 data['builds'].append(rbc.result_dir) 114 115 if len(data["builds"]): 116 actions_logic.ActionsLogic.send_rawhide_to_release(data) 117 118 db.session.commit()
119
120 -def turn_on_the_chroot_for_copr(copr, rawhide_name, mock_chroot):
121 rawhide_chroot = None 122 for chroot in copr.copr_chroots: 123 if chroot.name == rawhide_name: 124 rawhide_chroot = chroot 125 if chroot.name == mock_chroot.name: 126 # already created 127 return 128 129 create_kwargs = { 130 "buildroot_pkgs": rawhide_chroot.buildroot_pkgs, 131 "comps": rawhide_chroot.comps, 132 "comps_name": rawhide_chroot.comps_name, 133 } 134 coprs_logic.CoprChrootsLogic.create_chroot(copr.user, copr, mock_chroot, **create_kwargs)
135