class JobProject(db.Model): __tablename__ = 'job_projects' job_id = db.Column(db.Integer, db.ForeignKey('jobs.id'), primary_key=True) project_id = db.Column(db.Integer, db.ForeignKey('projects.id'), primary_key=True) # may optionally be used to specify the name of the parameter this jenkins # job uses to set the sha for this project. used when triggering jobs for # pull requests for the non-pr projects parameter_name = db.Column(db.String(STRING_LENGTH), nullable=True)
class Job(db.Model): __tablename__ = "jobs" id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(STRING_LENGTH), unique=True, nullable=False) projects = db.relationship('Project', secondary=JobProject.__table__, backref='jobs') def ordered_projects(self): return sorted(list(self.projects), key=lambda p: p.name)
class BuildSha(db.Model): __tablename__ = "build_shas" build_id = db.Column(db.Integer, db.ForeignKey('builds.id'), primary_key=True) project_id = db.Column(db.Integer, db.ForeignKey('projects.id'), primary_key=True) sha = db.Column(db.String(40)) build = db.relationship(Build) project = db.relationship(Project)
class Build(db.Model): __tablename__ = "builds" id = db.Column(db.Integer, primary_key=True) build_number = db.Column(db.Integer) job_id = db.Column(db.Integer, db.ForeignKey('jobs.id')) success = db.Column(db.Boolean, nullable=True) status = db.Column(db.Text, nullable=True, default="") job = db.relationship('Job') def __str__(self): return "{}/{}".format(self.job.name, self.build_number)
class Project(db.Model): __tablename__ = "projects" __table_args = (db.UniqueConstraint('owner', 'name'), ) id = db.Column(db.Integer, primary_key=True) owner = db.Column(db.String(STRING_LENGTH), nullable=False) name = db.Column(db.String(STRING_LENGTH), nullable=False) master_sha = db.Column(db.String(40), nullable=True) # A flag to determine whether cinch should post status updates to github update_status = db.Column(db.Boolean, nullable=False, default=False) def web_url(self): return "https://github.com/{}/{}".format(self.owner, self.name) def __str__(self): return self.name
class PullRequest(db.Model): __tablename__ = "pull_requests" number = db.Column(db.Integer, primary_key=True, autoincrement=False) project_id = db.Column(db.Integer, db.ForeignKey('projects.id'), primary_key=True, autoincrement=False) head = db.Column(db.String(40), nullable=False) merge_head = db.Column(db.String(40), nullable=True) owner = db.Column(db.Text, nullable=False) title = db.Column(db.Text, nullable=False) ahead_of_master = db.Column(db.Integer, nullable=True) behind_master = db.Column(db.Integer, nullable=True) is_mergeable = db.Column(db.Boolean, nullable=True) is_open = db.Column(db.Boolean, nullable=True) project = db.relationship('Project', backref='pull_requests')