1
2
3 import argparse
4 import os
5 import subprocess
6 import datetime
7 import sqlalchemy
8 import time
9
10 import flask
11 from flask_script import Manager, Command, Option, Group
12 from flask.ext.whooshee import Whooshee
13
14 from coprs import app
15 from coprs import db
16 from coprs import exceptions
17 from coprs import models
18 from coprs.logic import coprs_logic, packages_logic, actions_logic, builds_logic
19 from coprs.views.misc import create_user_wrapper
20 from coprs.whoosheers import CoprWhoosheer
21 from run import generate_repo_packages
22 from sqlalchemy import or_
23
24
26
27 - def run(self, test_args):
28 os.environ["COPRS_ENVIRON_UNITTEST"] = "1"
29 if not (("COPR_CONFIG" in os.environ) and os.environ["COPR_CONFIG"]):
30 os.environ["COPR_CONFIG"] = "/etc/copr/copr_unit_test.conf"
31 os.environ["PYTHONPATH"] = "."
32 return subprocess.call(["/usr/bin/python", "-m", "pytest"] + (test_args or []))
33
34 option_list = (
35 Option("-a",
36 dest="test_args",
37 nargs=argparse.REMAINDER),
38 )
39
40
42
43 """
44 Create the sqlite DB file (not the tables).
45 Used for alembic, "create_db" does this automatically.
46 """
47
49 if flask.current_app.config["SQLALCHEMY_DATABASE_URI"].startswith("sqlite"):
50
51 datadir_name = os.path.dirname(
52 flask.current_app.config["SQLALCHEMY_DATABASE_URI"][10:])
53 if not os.path.exists(datadir_name):
54 os.makedirs(datadir_name)
55
56
58
59 """
60 Create the DB schema
61 """
62
63 - def run(self, alembic_ini=None):
77
78 option_list = (
79 Option("--alembic",
80 "-f",
81 dest="alembic_ini",
82 help="Path to the alembic configuration file (alembic.ini)",
83 required=True),
84 )
85
86
88
89 """
90 Delete DB
91 """
92
95
96
98
103
106
108 print("{0} - chroot doesn\"t exist.".format(chroot_name))
109
110 option_list = (
111 Option("chroot_names",
112 help="Chroot name, e.g. fedora-18-x86_64.",
113 nargs="+"),
114 )
115
116
118
119 "Creates a mock chroot in DB"
120
121 - def run(self, chroot_names):
130
131
133
134 option_list = (
135 Option("rawhide_chroot", help="Rawhide chroot name, e.g. fedora-rawhide-x86_64."),
136 Option("dest_chroot", help="Destination chroot, e.g. fedora-24-x86_64."),
137 )
138
139 - def run(self, rawhide_chroot, dest_chroot):
181
195
198
199
201
202 "Copy backend data of the latest successful rawhide builds into a new chroot"
203
204 - def run(self, rawhide_chroot, dest_chroot):
226
228
229 "Activates or deactivates a chroot"
230
231 - def run(self, chroot_names, action):
242
243 option_list = ChrootCommand.option_list + (
244 Option("--action",
245 "-a",
246 dest="action",
247 help="Action to take - currently activate or deactivate",
248 choices=["activate", "deactivate"],
249 required=True),
250 )
251
252
254
255 "Activates or deactivates a chroot"
256
257 - def run(self, chroot_names):
266
267
269
270 "Displays current mock chroots"
271
272 - def run(self, active_only):
277
278 option_list = (
279 Option("--active-only",
280 "-a",
281 dest="active_only",
282 help="Display only active chroots",
283 required=False,
284 action="store_true",
285 default=False),
286 )
287
288
290
291 """
292 You should not use regularly as that user will not be related to FAS account.
293 This should be used only for testing or adding special accounts e.g. proxy user.
294 """
295
296 - def run(self, name, mail, **kwargs):
310
311 option_list = (
312 Option("name"),
313 Option("mail"),
314 Option("--api_token", default=None, required=False),
315 Option("--api_login", default=None, required=False),
316 )
317
318
320
321 - def run(self, name, **kwargs):
343
344 option_list = (
345 Option("name"),
346 Group(
347 Option("--admin",
348 action="store_true"),
349 Option("--no-admin",
350 action="store_true"),
351 exclusive=True
352 ),
353 Group(
354 Option("--proven",
355 action="store_true"),
356 Option("--no-proven",
357 action="store_true"),
358 exclusive=True
359 ),
360 Group(
361 Option("--proxy",
362 action="store_true"),
363 Option("--no-proxy",
364 action="store_true"),
365 exclusive=True
366 )
367 )
368
369
371
372 """
373 Marks build as failed on all its non-finished chroots
374 """
375
376 option_list = [Option("build_id")]
377
378 - def run(self, build_id, **kwargs):
379 try:
380 builds_logic.BuildsLogic.mark_as_failed(build_id)
381 print("Marking non-finished chroots of build {} as failed".format(build_id))
382 db.session.commit()
383
384 except (sqlalchemy.exc.DataError, sqlalchemy.orm.exc.NoResultFound) as e:
385 print("Error: No such build {}".format(build_id))
386 return 1
387
388
390 """
391 recreates whoosh indexes for all projects
392 """
393
410
411
413 """
414 Recreates whoosh indexes for projects for which
415 indexed data were updated in last n minutes.
416 Doesn't update schema.
417 """
418
419 option_list = [Option("minutes_passed")]
420
421 - def run(self, minutes_passed):
431
432
434 """
435 go through all coprs and create configuration rpm packages
436 for them, if they don't already have it
437 """
438
441
442
443 manager = Manager(app)
444 manager.add_command("test", TestCommand())
445 manager.add_command("create_sqlite_file", CreateSqliteFileCommand())
446 manager.add_command("create_db", CreateDBCommand())
447 manager.add_command("drop_db", DropDBCommand())
448 manager.add_command("create_chroot", CreateChrootCommand())
449 manager.add_command("alter_chroot", AlterChrootCommand())
450 manager.add_command("display_chroots", DisplayChrootsCommand())
451 manager.add_command("drop_chroot", DropChrootCommand())
452 manager.add_command("alter_user", AlterUserCommand())
453 manager.add_command("add_user", AddUserCommand())
454 manager.add_command("fail_build", FailBuildCommand())
455 manager.add_command("update_indexes", UpdateIndexesCommand())
456 manager.add_command("update_indexes_quick", UpdateIndexesQuickCommand())
457 manager.add_command("generate_repo_packages", GenerateRepoPackagesCommand())
458 manager.add_command("rawhide_to_release", RawhideToReleaseCommand())
459 manager.add_command("backend_rawhide_to_release", BackendRawhideToReleaseCommand())
460
461 if __name__ == "__main__":
462 manager.run()
463