def housekeepArtifacts()

in riff-raff/app/housekeeping/ArtifactHousekeeping.scala [182:232]


  def housekeepArtifacts(now: DateTime): Int = {
    if (config.housekeeping.tagOldArtifacts.enabled) {
      log.info("Running housekeeping")
      val projectNames =
        ArtifactHousekeeping.getProjectNames(s3Client, artifactBucketName)
      val taggedBuilds = projectNames.map { name =>
        log.info(s"Housekeeping project '$name'")
        val buildIdsForProject = ArtifactHousekeeping
          .getBuildIds(s3Client, artifactBucketName, name)
          .toSet
        ArtifactHousekeeping.getBuildIdsToKeep(
          deployments,
          name,
          config.housekeeping.tagOldArtifacts.numberToScan,
          config.housekeeping.tagOldArtifacts.numberToKeep
        ) match {
          case Left(_) =>
            log.warn(
              s"Failed to get list of builds to keep for project $name - not housekeeping this project"
            )
            0
          case Right(buildIdsToKeep) if buildIdsToKeep.nonEmpty =>
            val buildIdsToKeepSet = buildIdsToKeep.toSet
            log.info(
              s"Keeping ${buildIdsToKeepSet.size} builds of $name (${buildIdsToKeepSet.toList.sorted})"
            )
            val missingBuilds = buildIdsToKeepSet -- buildIdsForProject
            if (missingBuilds.nonEmpty) {
              log.error(
                "Some builds we wanted to keep were not found, possible something is awry. Skipping tagging."
              )
              0
            } else {
              val buildsToTag = buildIdsForProject -- buildIdsToKeepSet
              tagBuilds(s3Client, artifactBucketName, name, buildsToTag, now)
            }
          case Right(_) =>
            log.error(
              s"List of builds to keep for project $name was empty, possible something is awry. Skipping tagging."
            )
            0
        }
      }
      val numberOfTaggedBuilds = taggedBuilds.sum
      log.info(s"Tagged $numberOfTaggedBuilds builds for deletion")
      numberOfTaggedBuilds
    } else {
      log.info("Artifact housekeeping not enabled - skipping")
      0
    }
  }