56
58
parser.add_argument('-v', '--verbose', help='Verbose info',
57
59
action='store_true')
58
60
parser.add_argument('--log-path', help='Where to write logs.',
59
default='ci-director.log')
61
default='update-outcome.log')
60
62
parser.add_argument('--log-count', help='The number of backups to keep.',
61
63
default=2, type=int)
62
64
return parser.parse_args()
642
644
self.write_json(mongo_name, mongo_data, make_dir=True)
647
def upload_artifacts(jenkins, by_revision_build, s3_storage):
648
"""Upload the artifacts for newly-completed builds.
650
by_revision_build should not include previously-uploaded builds, to avoid
651
unnecessary re-uploads.
653
Builds that do not have a result are not uploaded. They lack artifacts,
654
because that is a post-build action, and they have incomplete console
655
logs, which could confuse other tools.
657
logger = logging.getLogger()
658
for revision_build, jobs in by_revision_build.items():
659
for job, job_data in jobs.items():
660
artifact_job = ArtifactJob(job, logger)
661
for build_info in job_data['builds'].values():
662
if build_info['result'] is None:
664
'No result for {} #{}. Skipping.'.format(
665
job, build_info['number']))
668
'Uploading artifacts for {} #{}'.format(
669
job, build_info['number']))
670
artifact_job.archive_results(
671
jenkins, build_info, revision_build, s3_storage)
646
675
"""Entry point for update-outcome script."""
647
676
args = parse_args()
649
678
config = ConfigReader.read_config()
650
679
setdefaulttimeout(30)
651
680
jenkins = make_jenkins(config)
681
s3_storage = S3Storage.from_config(config)
652
682
outcome_dir = os.path.join(os.environ['HOME'],
653
683
'.config/ci-director-outcome')
654
684
with OutcomeState(outcome_dir) as state:
655
685
by_revision_build, cloud_health, new_last_completed = scan_new_builds(
656
686
state.data, jenkins)
687
upload_artifacts(jenkins, by_revision_build, s3_storage)
657
688
cloud_health_builds = BuildFiles.for_cloud_health(state)
658
689
list(cloud_health_builds.update_files(cloud_health))
659
690
revision_build_files = BuildFiles.for_revision_builds(state)