예제 #1
0
def github_build(request):
    """
    A post-commit hook for github.
    """
    if request.method == 'POST':
        obj = json.loads(request.POST['payload'])
        url = obj['repository']['url']
        ghetto_url = url.replace('http://', '').replace('https://', '')
        branch = obj['ref'].replace('refs/heads/', '')
        pc_log.info("(Incoming Github Build) %s [%s]" % (ghetto_url, branch))
        try:
            return _build_url(ghetto_url, [branch])
        except NoProjectException:
            try:
                name = obj['repository']['name']
                desc = obj['repository']['description']
                homepage = obj['repository']['homepage']
                repo = obj['repository']['url']

                email = obj['repository']['owner']['email']
                user = User.objects.get(email=email)

                proj = Project.objects.create(
                    name=name,
                    description=desc,
                    project_url=homepage,
                    repo=repo,
                )
                proj.users.add(user)
                # Version doesn't exist yet, so use classic build method
                update_docs.delay(pk=proj.pk)
                pc_log.info("Created new project %s" % (proj))
            except Exception, e:
                pc_log.error("Error creating new project %s: %s" % (name, e))
                return HttpResponseNotFound('Repo not found')
예제 #2
0
def trigger_build(project, version=None, record=True, force=False, basic=False):
    """
    An API to wrap the triggering of a build.
    """
    # Avoid circular import
    from projects.tasks import update_docs

    if project.skip:
        return None

    if not version:
        version = project.versions.get(slug='latest')

    if record:
        build = Build.objects.create(
            project=project,
            version=version,
            type='html',
            state='triggered',
            success=True,
        )
        update_docs.delay(pk=project.pk, version_pk=version.pk, record=record, force=force, basic=basic, build_pk=build.pk)
    else:
        build = None
        update_docs.delay(pk=project.pk, version_pk=version.pk, record=record, force=force, basic=basic)

    return build
예제 #3
0
def trigger_build(project, version=None, record=True, force=False):
    """
    An API to wrap the triggering of a build.
    """
    # Avoid circular import
    from projects.tasks import update_docs

    if not version:
        version = project.versions.get(slug='latest')

    if record:
        build = Build.objects.create(
            project=project,
            version=version,
            type='html',
            state='triggered',
            success=True,
        )
        update_docs.delay(pk=project.pk,
                          version_pk=version.pk,
                          record=record,
                          force=force,
                          build_pk=build.pk)
    else:
        build = None
        update_docs.delay(pk=project.pk,
                          version_pk=version.pk,
                          record=record,
                          force=force)

    return build
예제 #4
0
def github_build(request):
    """
    A post-commit hook for github.
    """
    if request.method == "POST":
        obj = json.loads(request.POST["payload"])
        url = obj["repository"]["url"]
        ghetto_url = url.replace("http://", "").replace("https://", "")
        branch = obj["ref"].replace("refs/heads/", "")
        pc_log.info("(Incoming Github Build) %s [%s]" % (ghetto_url, branch))
        try:
            return _build_url(ghetto_url, [branch])
        except NoProjectException:
            try:
                name = obj["repository"]["name"]
                desc = obj["repository"]["description"]
                homepage = obj["repository"]["homepage"]
                repo = obj["repository"]["url"]

                email = obj["repository"]["owner"]["email"]
                user = User.objects.get(email=email)

                proj = Project.objects.create(name=name, description=desc, project_url=homepage, repo=repo)
                proj.users.add(user)
                # Version doesn't exist yet, so use classic build method
                update_docs.delay(pk=proj.pk)
                pc_log.info("Created new project %s" % (proj))
            except Exception, e:
                pc_log.error("Error creating new project %s: %s" % (name, e))
                return HttpResponseNotFound("Repo not found")
예제 #5
0
    def save(self, *args, **kwargs):
        # save the project
        project = super(ImportProjectForm, self).save(*args, **kwargs)

        # kick off the celery job
        update_docs.delay(pk=project.pk)

        return project
예제 #6
0
 def save_version(self, version):
     new_value = self.cleaned_data.get('version-%s' % version.slug, None)
     if new_value is None or new_value == version.active:
         return
     version.active = new_value
     version.save()
     if version.active and not version.built and not version.uploaded:
         update_docs.delay(self.project.pk, record=True, version_pk=version.pk)
예제 #7
0
    def save(self, *args, **kwargs):
        # save the project
        project = super(ImportProjectForm, self).save(*args, **kwargs)

        # kick off the celery job
        update_docs.delay(pk=project.pk)

        return project
예제 #8
0
def generic_build(request, pk):
    project = Project.objects.get(pk=pk)
    context = {'built': False, 'project': project}
    #This should be in the post, but for now it's always built for backwards compat
    update_docs.delay(pk=pk, touch=True)
    if request.method == 'POST':
        context['built'] = True
    return render_to_response('post_commit.html', context,
            context_instance=RequestContext(request))
예제 #9
0
 def save_version(self, version):
     new_value = self.cleaned_data.get('version-%s' % version.slug, None)
     if new_value is None or new_value == version.active:
         return
     version.active = new_value
     version.save()
     if version.active and not version.built and not version.uploaded:
         update_docs.delay(self.project.pk,
                           record=True,
                           version_pk=version.pk)
예제 #10
0
def github_build(request):
    """
    A post-commit hook for github.
    """
    obj = json.loads(request.POST['payload'])
    name = obj['repository']['name']
    url = obj['repository']['url']
    ghetto_url = url.replace('http://', '')
    project = Project.objects.filter(repo__contains=ghetto_url)[0]
    update_docs.delay(pk=project.pk)
    return HttpResponse('Build Started')
예제 #11
0
def generic_build(request, pk):
    project = Project.objects.get(pk=pk)
    context = {"built": False, "project": project}
    if request.method == "POST":
        context["built"] = True
        slug = request.POST.get("version_slug", None)
        if slug:
            version = project.versions.get(slug=slug)
            update_docs.delay(pk=pk, version_pk=version.pk, touch=True)
        else:
            update_docs.delay(pk=pk, touch=True)
    return render_to_response("post_commit.html", context, context_instance=RequestContext(request))
예제 #12
0
 def save_version(self, version):
     new_value = self.cleaned_data.get("version-%s" % version.slug, None)
     privacy_level = self.cleaned_data.get("privacy-%s" % version.slug, None)
     if (new_value is None or new_value == version.active) and (
         privacy_level is None or privacy_level == version.privacy_level
     ):
         return
     version.active = new_value
     version.privacy_level = privacy_level
     version.save()
     if version.active and not version.built and not version.uploaded:
         update_docs.delay(self.project.pk, record=True, version_pk=version.pk)
예제 #13
0
    def save(self, *args, **kwargs):
        # grab the old content before saving
        old_content = self.initial.get("content", "")

        # save the file object
        file_obj = super(FileForm, self).save(*args, **kwargs)

        # create a new revision from the old content -> new
        file_obj.create_revision(old_content, self.cleaned_data.get("revision_comment", ""))

        update_docs.delay(file_obj.project.pk)

        return file_obj
예제 #14
0
    def save(self, *args, **kwargs):
        # grab the old content before saving
        old_content = self.initial.get('content', '')

        # save the file object
        file_obj = super(FileForm, self).save(*args, **kwargs)

        # create a new revision from the old content -> new
        file_obj.create_revision(old_content,
                                 self.cleaned_data.get('revision_comment', ''))

        update_docs.delay(file_obj.project.pk)

        return file_obj
예제 #15
0
def generic_build(request, pk):
    project = Project.objects.get(pk=pk)
    context = {'built': False, 'project': project}
    if request.method == 'POST':
        context['built'] = True
        slug = request.POST.get('version_slug', None)
        if slug:
            version = project.versions.get(slug=slug)
            update_docs.delay(pk=pk, version_pk=version.pk, force=True)
        else:
            update_docs.delay(pk=pk, force=True)
        # return HttpResponse('Build Started')
        return redirect('builds_project_list', project.slug)
    return redirect('builds_project_list', project.slug)
예제 #16
0
def generic_build(request, pk):
    project = Project.objects.get(pk=pk)
    context = {'built': False, 'project': project}
    if request.method == 'POST':
        context['built'] = True
        slug = request.POST.get('version_slug', None)
        if slug:
            version = project.versions.get(slug=slug)
            update_docs.delay(pk=pk, version_pk=version.pk, force=True)
        else:
            update_docs.delay(pk=pk, force=True)
        # return HttpResponse('Build Started')
        return redirect('builds_project_list', project.slug)
    return redirect('builds_project_list', project.slug)
예제 #17
0
def bitbucket_build(request):
    if request.method == 'POST':
        obj = json.loads(request.POST['payload'])
        rep = obj['repository']
        name = rep['name']
        url = "%s%s" % ("bitbucket.org",  rep['absolute_url'].rstrip('/'))
        log.info("(Bitbucket Build) %s" % (url))
        try:
            project = Project.objects.filter(repo__contains=url)[0]
            update_docs.delay(pk=project.pk, force=True)
            return HttpResponse('Build Started')
        except Exception, e:
            log.error("(Github Build) Failed: %s:%s" % (name, e))
            return HttpResponseNotFound('Build Failed')
예제 #18
0
def bitbucket_build(request):
    if request.method == "POST":
        obj = json.loads(request.POST["payload"])
        rep = obj["repository"]
        name = rep["name"]
        url = "%s%s" % ("bitbucket.org", rep["absolute_url"].rstrip("/"))
        log.info("(Bitbucket Build) %s" % (url))
        try:
            project = Project.objects.filter(repo__contains=url)[0]
            update_docs.delay(pk=project.pk, force=True)
            return HttpResponse("Build Started")
        except Exception, e:
            log.error("(Github Build) Failed: %s:%s" % (name, e))
            return HttpResponseNotFound("Build Failed")
예제 #19
0
def generic_build(request, pk):
    project = Project.objects.get(pk=pk)
    context = {'built': False, 'project': project}
    if request.method == 'POST':
        context['built'] = True
        slug = request.POST.get('version_slug', None)
        if slug:
            version = project.versions.get(slug=slug)
            update_docs.delay(pk=pk, version_pk=version.pk, force=True)
        else:
            update_docs.delay(pk=pk, force=True)
        return HttpResponse('Build Started')
    return render_to_response('post_commit.html', context,
            context_instance=RequestContext(request))
예제 #20
0
def generic_build(request, pk):
    project = Project.objects.get(pk=pk)
    context = {'built': False, 'project': project}
    if request.method == 'POST':
        context['built'] = True
        slug = request.POST.get('version_slug', None)
        if slug:
            version = project.versions.get(slug=slug)
            update_docs.delay(pk=pk, version_pk=version.pk, touch=True)
        else:
            update_docs.delay(pk=pk, touch=True)
    return render_to_response('post_commit.html',
                              context,
                              context_instance=RequestContext(request))
예제 #21
0
def bitbucket_build(request):
    if request.method == 'POST':
        obj = json.loads(request.POST['payload'])
        rep = obj['repository']
        name = rep['name']
        url = "%s%s" % ("bitbucket.org", rep['absolute_url'].rstrip('/'))
        log.info("(Bitbucket Build) %s" % (url))
        try:
            project = Project.objects.filter(repo__contains=url)[0]
            update_docs.delay(pk=project.pk, force=True)
            return HttpResponse('Build Started')
        except Exception, e:
            log.error("(Github Build) Failed: %s:%s" % (name, e))
            return HttpResponseNotFound('Build Failed')
예제 #22
0
def bitbucket_build(request):
    if request.method == "POST":
        obj = json.loads(request.POST["payload"])
        rep = obj["repository"]
        name = rep["name"]
        url = "%s%s" % ("bitbucket.org", rep["absolute_url"])
        try:
            project = Project.objects.filter(repo__contains=url)[0]
            update_docs.delay(pk=project.pk, touch=True)
            return HttpResponse("Build Started")
        except:
            mail_admins("Build Failure", "%s failed to build via github" % name)
            return HttpResponse("Build Failed")
    else:
        return render_to_response("post_commit.html", {}, context_instance=RequestContext(request))
예제 #23
0
def generic_build(request, pk=None):
    try:
        project = Project.objects.get(pk=pk)
    # Allow slugs too
    except (Project.DoesNotExist, ValueError):
        project = Project.objects.get(slug=pk)
    if request.method == 'POST':
        slug = request.POST.get('version_slug', None)
        if slug:
            pc_log.info("(Incoming Generic Build) %s [%s]" % (project.slug, slug))
            _build_version(project, slug)
        else:
            pc_log.info("(Incoming Generic Build) %s [%s]" % (project.slug, 'latest'))
            update_docs.delay(pk=pk, force=True)
    return redirect('builds_project_list', project.slug)
예제 #24
0
def generic_build(request, pk=None):
    try:
        project = Project.objects.get(pk=pk)
    # Allow slugs too
    except (Project.DoesNotExist, ValueError):
        project = Project.objects.get(slug=pk)
    context = {'built': False, 'project': project}
    if request.method == 'POST':
        context['built'] = True
        slug = request.POST.get('version_slug', None)
        if slug:
            _build_version(project, slug)
        else:
            update_docs.delay(pk=pk, force=True)
        return redirect('builds_project_list', project.slug)
    return redirect('builds_project_list', project.slug)
예제 #25
0
def github_build(request):
    """
    A post-commit hook for github.
    """
    if request.method == 'POST':
        obj = json.loads(request.POST['payload'])
        name = obj['repository']['name']
        url = obj['repository']['url']
        ghetto_url = url.replace('http://', '').replace('https://', '')
        try:
            project = Project.objects.filter(repo__contains=ghetto_url)[0]
            update_docs.delay(pk=project.pk, force=True)
            return HttpResponse('Build Started')
        except Exception, e:
            mail_admins('Build Failure', '%s failed to build via github.\n\n%s' % (name, e))
            return HttpResponse('Build Failed')
예제 #26
0
def bitbucket_build(request):
    if request.method == 'POST':
        obj = json.loads(request.POST['payload'])
        rep = obj['repository']
        name = rep['name']
        url = "%s%s" % ("bitbucket.org",  rep['absolute_url'])
        try:
            project = Project.objects.filter(repo__contains=url)[0]
            update_docs.delay(pk=project.pk, touch=True)
            return HttpResponse('Build Started')
        except:
            mail_admins('Build Failure', '%s failed to build via bitbucket' % name)
            return HttpResponse('Build Failed')
    else:
        return render_to_response('post_commit.html', {},
                context_instance=RequestContext(request))
예제 #27
0
def bitbucket_build(request):
    if request.method == 'POST':
        obj = json.loads(request.POST['payload'])
        rep = obj['repository']
        name = rep['name']
        url = "%s%s" % ("bitbucket.org",  rep['absolute_url'])
        try:
            project = Project.objects.filter(repo__contains=url)[0]
            update_docs.delay(pk=project.pk, force=True)
            return HttpResponse('Build Started')
        except:
            mail_admins('Build Failure', '%s failed to build via bitbucket' % name)
            return HttpResponse('Build Failed')
    else:
        return render_to_response('post_commit.html', {},
                context_instance=RequestContext(request))
예제 #28
0
def github_build(request):
    """
    A post-commit hook for github.
    """
    if request.method == 'POST':
        obj = json.loads(request.POST['payload'])
        name = obj['repository']['name']
        url = obj['repository']['url']
        ghetto_url = url.replace('http://', '').replace('https://', '')
        try:
            project = Project.objects.filter(repo__contains=ghetto_url)[0]
            update_docs.delay(pk=project.pk, force=True)
            return HttpResponse('Build Started')
        except Exception, e:
            mail_admins('Build Failure', '%s failed to build via github.\n\n%s' % (name, e))
            return HttpResponse('Build Failed')
예제 #29
0
def github_build(request):
    """
    A post-commit hook for github.
    """
    if request.method == 'POST':
        obj = json.loads(request.POST['payload'])
        name = obj['repository']['name']
        url = obj['repository']['url']
        ghetto_url = url.replace('http://', '').replace('https://', '')
        branch = obj['ref'].replace('refs/heads/', '')
        log.info("(Github Build) %s:%s" % (ghetto_url, branch))
        version_pk = None
        version_slug = branch
        try:
            project = Project.objects.filter(repo__contains=ghetto_url)[0]
            version = project.version_from_branch_name(branch)
            if version:
                default = project.default_branch or project.vcs_repo(
                ).fallback_branch
                if branch == default:
                    #Shortcircuit versions that are default
                    #These will build at "latest", and thus won't be active
                    version = project.versions.get(slug='latest')
                    version_pk = version.pk
                    version_slug = version.slug
                    log.info("(Github Build) Building %s:%s" %
                             (project.slug, version.slug))
                elif version in project.versions.exclude(active=True):
                    log.info("(Github Build) Not building %s" % version.slug)
                    return HttpResponseNotFound('Not Building: %s' % branch)
                else:
                    version_pk = version.pk
                    version_slug = version.slug
                    log.info("(Github Build) Building %s:%s" %
                             (project.slug, version.slug))
            else:
                version_slug = 'latest'
                branch = 'latest'
                log.info("(Github Build) Building %s:latest" % project.slug)
            #version_pk being None means it will use "latest"
            update_docs.delay(pk=project.pk, version_pk=version_pk, force=True)
            return HttpResponse('Build Started: %s' % version_slug)
        except Exception, e:
            mail_admins('Build Failure',
                        '%s failed to build via github.\n\n%s' % (name, e))
            return HttpResponseNotFound('Build Failed')
예제 #30
0
def github_build(request):
    """
    A post-commit hook for github.
    """
    if request.method == "POST":
        obj = json.loads(request.POST["payload"])
        name = obj["repository"]["name"]
        url = obj["repository"]["url"]
        ghetto_url = url.replace("http://", "").replace("https://", "")
        try:
            project = Project.objects.filter(repo__contains=ghetto_url)[0]
            update_docs.delay(pk=project.pk, touch=True)
            return HttpResponse("Build Started")
        except:
            mail_admins("Build Failure", "%s failed to build via github" % name)
            return HttpResponse("Build Failed")
    else:
        return render_to_response("post_commit.html", {}, context_instance=RequestContext(request))
예제 #31
0
def github_build(request):
    """
    A post-commit hook for github.
    """
    if request.method == 'POST':
        obj = json.loads(request.POST['payload'])
        name = obj['repository']['name']
        url = obj['repository']['url']
        ghetto_url = url.replace('http://', '').replace('https://', '')
        try:
            project = Project.objects.filter(repo__contains=ghetto_url)[0]
            update_docs.delay(pk=project.pk, touch=True)
            return HttpResponse('Build Started')
        except:
            mail_admins('Build Failure', '%s failed to build via github' % name)
            return HttpResponse('Build Failed')
    else:
        return render_to_response('post_commit.html', {},
                context_instance=RequestContext(request))
예제 #32
0
def github_build(request):
    """
    A post-commit hook for github.
    """
    if request.method == "POST":
        obj = json.loads(request.POST["payload"])
        name = obj["repository"]["name"]
        url = obj["repository"]["url"]
        ghetto_url = url.replace("http://", "").replace("https://", "")
        branch = obj["ref"].replace("refs/heads/", "")
        log.info("(Github Build) %s:%s" % (ghetto_url, branch))
        version_pk = None
        version_slug = branch
        try:
            project = Project.objects.filter(repo__contains=ghetto_url)[0]
            version = project.version_from_branch_name(branch)
            if version:
                default = project.default_branch or project.vcs_repo().fallback_branch
                if branch == default:
                    # Shortcircuit versions that are default
                    # These will build at "latest", and thus won't be active
                    version = project.versions.get(slug="latest")
                    version_pk = version.pk
                    version_slug = version.slug
                    log.info("(Github Build) Building %s:%s" % (project.slug, version.slug))
                elif version in project.versions.exclude(active=True):
                    log.info("(Github Build) Not building %s" % version.slug)
                    return HttpResponseNotFound("Not Building: %s" % branch)
                else:
                    version_pk = version.pk
                    version_slug = version.slug
                    log.info("(Github Build) Building %s:%s" % (project.slug, version.slug))
            else:
                version_slug = "latest"
                branch = "latest"
                log.info("(Github Build) Building %s:latest" % project.slug)
            # version_pk being None means it will use "latest"
            update_docs.delay(pk=project.pk, version_pk=version_pk, force=True)
            return HttpResponse("Build Started: %s" % version_slug)
        except Exception, e:
            log.error("(Github Build) Failed: %s:%s" % (name, e))
            return HttpResponseNotFound("Build Failed")
예제 #33
0
def github_build(request):
    """
    A post-commit hook for github.
    """
    if request.method == 'POST':
        obj = json.loads(request.POST['payload'])
        name = obj['repository']['name']
        url = obj['repository']['url']
        ghetto_url = url.replace('http://', '').replace('https://', '')
        branch = obj['ref'].replace('refs/heads/', '')
        log.info("(Github Build) %s:%s" % (ghetto_url, branch))
        version_pk = None
        version_slug = branch
        try:
            project = Project.objects.filter(repo__contains=ghetto_url)[0]
            version = project.version_from_branch_name(branch)
            if version:
                default = project.default_branch or project.vcs_repo().fallback_branch
                if branch == default:
                    #Shortcircuit versions that are default
                    #These will build at "latest", and thus won't be active
                    version = project.versions.get(slug='latest')
                    version_pk = version.pk
                    version_slug = version.slug
                    log.info("(Github Build) Building %s:%s" % (project.slug, version.slug))
                elif version in project.versions.exclude(active=True):
                    log.info("(Github Build) Not building %s" % version.slug)
                    return HttpResponseNotFound('Not Building: %s' % branch)
                else:
                    version_pk = version.pk
                    version_slug = version.slug
                    log.info("(Github Build) Building %s:%s" % (project.slug, version.slug))
            else:
                version_slug = 'latest'
                branch = 'latest'
                log.info("(Github Build) Building %s:latest" % project.slug)
            #version_pk being None means it will use "latest"
            update_docs.delay(pk=project.pk, version_pk=version_pk, force=True)
            return HttpResponse('Build Started: %s' % version_slug)
        except Exception, e:
            mail_admins('Build Failure', '%s failed to build via github.\n\n%s' % (name, e))
            return HttpResponseNotFound('Build Failed')
예제 #34
0
def _build_version(project, slug):
    default = project.default_branch or (project.vcs_repo().fallback_branch)
    if slug == default:
        # short circuit versions that are default
        # these will build at "latest", and thus won't be
        # active
        version = project.versions.get(slug='latest')
        update_docs.delay(pk=project.pk, version_pk=version.pk, force=True)
        log.info(("(Version build) building %s:%s"
                  % (project.slug, version.slug)))
        return "latest"
    elif project.versions.exclude(active=True).filter(slug=slug).exists():
        log.info(("(Version build) not building %s"% slug))
        return None
    else:
        version = project.versions.get(slug=slug)
        update_docs.delay(pk=project.pk, version_pk=version.pk, force=True)
        log.info(("(Version build) building %s:%s"
                  % (project.slug, version.slug)))
        return slug
예제 #35
0
def github_build(request):
    """
    A post-commit hook for github.
    """
    if request.method == 'POST':
        obj = json.loads(request.POST['payload'])
        name = obj['repository']['name']
        url = obj['repository']['url']
        ghetto_url = url.replace('http://', '').replace('https://', '')
        try:
            project = Project.objects.filter(repo__contains=ghetto_url)[0]
            update_docs.delay(pk=project.pk, touch=True)
            return HttpResponse('Build Started')
        except:
            mail_admins('Build Failure',
                        '%s failed to build via github' % name)
            return HttpResponse('Build Failed')
    else:
        return render_to_response('post_commit.html', {},
                                  context_instance=RequestContext(request))
예제 #36
0
    def save(self, *args, **kwargs):
        created = self.instance.pk is None

        # save the project
        project = super(CreateProjectForm, self).save(*args, **kwargs)

        if created:
            # create a couple sample files
            for i, (sample_file, template) in enumerate(constants.SAMPLE_FILES):
                file = File.objects.create(
                    project=project,
                    heading=sample_file,
                    content=render_to_string(template, {'project': project}),
                    ordering=i+1,
                )
                file.create_revision(old_content='', comment='')

        # kick off the celery job
        update_docs.delay(pk=project.pk)

        return project
예제 #37
0
def _build_version(project, slug, already_built=()):
    default = project.default_branch or (project.vcs_repo().fallback_branch)
    if slug == default and slug not in already_built:
        # short circuit versions that are default
        # these will build at "latest", and thus won't be
        # active
        latest_version = project.versions.get(slug='latest')
        update_docs.delay(
            pk=project.pk, version_pk=latest_version.pk, force=True)
        pc_log.info(("(Version build) Building %s:%s"
                     % (project.slug, latest_version.slug)))
        if project.versions.exclude(active=False).filter(slug=slug).exists():
            # Handle the case where we want to build the custom branch too
            slug_version = project.versions.get(slug=slug)
            update_docs.delay(
                pk=project.pk, version_pk=slug_version.pk, force=True)
            pc_log.info(("(Version build) Building %s:%s"
                         % (project.slug, slug_version.slug)))
        return "latest"
    elif project.versions.exclude(active=True).filter(slug=slug).exists():
        pc_log.info(("(Version build) Not Building %s" % slug))
        return None
    elif slug not in already_built:
        version = project.versions.get(slug=slug)
        update_docs.delay(pk=project.pk, version_pk=version.pk, force=True)
        pc_log.info(("(Version build) Building %s:%s"
                     % (project.slug, version.slug)))
        return slug
    else:
        pc_log.info(("(Version build) Not Building %s" % slug))
        return None
예제 #38
0
def _build_version(project, slug, already_built=()):
    default = project.default_branch or (project.vcs_repo().fallback_branch)
    if slug == default and slug not in already_built:
        # short circuit versions that are default
        # these will build at "latest", and thus won't be
        # active
        latest_version = project.versions.get(slug='latest')
        update_docs.delay(pk=project.pk,
                          version_pk=latest_version.pk,
                          force=True)
        pc_log.info(("(Version build) Building %s:%s" %
                     (project.slug, latest_version.slug)))
        if project.versions.exclude(active=False).filter(slug=slug).exists():
            # Handle the case where we want to build the custom branch too
            slug_version = project.versions.get(slug=slug)
            update_docs.delay(pk=project.pk,
                              version_pk=slug_version.pk,
                              force=True)
            pc_log.info(("(Version build) Building %s:%s" %
                         (project.slug, slug_version.slug)))
        return "latest"
    elif project.versions.exclude(active=True).filter(slug=slug).exists():
        pc_log.info(("(Version build) Not Building %s" % slug))
        return None
    elif slug not in already_built:
        version = project.versions.get(slug=slug)
        update_docs.delay(pk=project.pk, version_pk=version.pk, force=True)
        pc_log.info(
            ("(Version build) Building %s:%s" % (project.slug, version.slug)))
        return slug
    else:
        pc_log.info(("(Version build) Not Building %s" % slug))
        return None
예제 #39
0
    def save(self, *args, **kwargs):
        created = self.instance.pk is None

        # save the project
        project = super(CreateProjectForm, self).save(*args, **kwargs)

        if created:
            # create a couple sample files
            for i, (sample_file,
                    template) in enumerate(constants.SAMPLE_FILES):
                file = File.objects.create(
                    project=project,
                    heading=unicode(sample_file),
                    content=render_to_string(template, {'project': project}),
                    ordering=i + 1,
                )
                file.create_revision(old_content='', comment='')

        # kick off the celery job
        update_docs.delay(pk=project.pk)

        return project
예제 #40
0
def generic_build(request, pk):
    update_docs.delay(pk=pk)
    return HttpResponse('Build Started')
예제 #41
0
def github_build(request):
    """
    A post-commit hook for github.
    """
    if request.method == 'POST':
        obj = json.loads(request.POST['payload'])
        name = obj['repository']['name']
        url = obj['repository']['url']
        ghetto_url = url.replace('http://', '').replace('https://', '')
        branch = obj['ref'].replace('refs/heads/', '')
        log.info("(Github Build) %s:%s" % (ghetto_url, branch))
        version_pk = None
        version_slug = branch
        try:
            projects = Project.objects.filter(repo__contains=ghetto_url)
            for project in projects:
                version = project.version_from_branch_name(branch)
                if version:
                    log.info("(Github Build) Processing %s:%s" %
                             (project.slug, version.slug))
                    default = project.default_branch or project.vcs_repo(
                    ).fallback_branch
                    if branch == default:
                        #Shortcircuit versions that are default
                        #These will build at "latest", and thus won't be active
                        version = project.versions.get(slug='latest')
                        version_pk = version.pk
                        version_slug = version.slug
                        log.info("(Github Build) Building %s:%s" %
                                 (project.slug, version.slug))
                    elif version in project.versions.exclude(active=True):
                        log.info("(Github Build) Not building %s" %
                                 version.slug)
                        return HttpResponseNotFound('Not Building: %s' %
                                                    branch)
                    else:
                        version_pk = version.pk
                        version_slug = version.slug
                        log.info("(Github Build) Building %s:%s" %
                                 (project.slug, version.slug))
                else:
                    version_slug = 'latest'
                    branch = 'latest'
                    log.info("(Github Build) Building %s:latest" %
                             project.slug)
                #version_pk being None means it will use "latest"
                update_docs.delay(pk=project.pk,
                                  version_pk=version_pk,
                                  force=True)
            return HttpResponse('Build Started: %s' % version_slug)
        except Exception, e:
            log.error("(Github Build) Failed: %s:%s" % (name, e))
            #handle new repos
            project = Project.objects.filter(repo__contains=ghetto_url)
            if not len(project):
                project = Project.objects.filter(name__icontains=name)
                if len(project):
                    #Bail if we think this thing exists
                    return HttpResponseNotFound('Build Failed')
            #create project
            try:
                email = obj['repository']['owner']['email']
                desc = obj['repository']['description']
                homepage = obj['repository']['homepage']
                repo = obj['repository']['url']
                user = User.objects.get(email=email)
                proj = Project.objects.create(
                    name=name,
                    description=desc,
                    project_url=homepage,
                    repo=repo,
                )
                proj.users.add(user)
                log.error("Created new project %s" % (proj))
            except Exception, e:
                log.error("Error creating new project %s: %s" % (name, e))
                return HttpResponseNotFound('Build Failed')

            return HttpResponseNotFound('Build Failed')
예제 #42
0
def github_build(request):
    """
    A post-commit hook for github.
    """
    if request.method == 'POST':
        obj = json.loads(request.POST['payload'])
        name = obj['repository']['name']
        url = obj['repository']['url']
        ghetto_url = url.replace('http://', '').replace('https://', '')
        branch = obj['ref'].replace('refs/heads/', '')
        log.info("(Github Build) %s:%s" % (ghetto_url, branch))
        version_pk = None
        version_slug = branch
        try:
            projects = Project.objects.filter(repo__contains=ghetto_url)
            for project in projects:
                version = project.version_from_branch_name(branch)
                if version:
                    log.info("(Github Build) Processing %s:%s" % (project.slug, version.slug))
                    default = project.default_branch or project.vcs_repo().fallback_branch
                    if branch == default:
                        #Shortcircuit versions that are default
                        #These will build at "latest", and thus won't be active
                        version = project.versions.get(slug='latest')
                        version_pk = version.pk
                        version_slug = version.slug
                        log.info("(Github Build) Building %s:%s" % (project.slug, version.slug))
                    elif version in project.versions.exclude(active=True):
                        log.info("(Github Build) Not building %s" % version.slug)
                        return HttpResponseNotFound('Not Building: %s' % branch)
                    else:
                        version_pk = version.pk
                        version_slug = version.slug
                        log.info("(Github Build) Building %s:%s" % (project.slug, version.slug))
                else:
                    version_slug = 'latest'
                    branch = 'latest'
                    log.info("(Github Build) Building %s:latest" % project.slug)
                #version_pk being None means it will use "latest"
                update_docs.delay(pk=project.pk, version_pk=version_pk, force=True)
            return HttpResponse('Build Started: %s' % version_slug)
        except Exception, e:
            log.error("(Github Build) Failed: %s:%s" % (name, e))
            #handle new repos
            project = Project.objects.filter(repo__contains=ghetto_url)
            if not len(project):
                project = Project.objects.filter(name__icontains=name)
                if len(project):
                    #Bail if we think this thing exists
                    return HttpResponseNotFound('Build Failed')
            #create project
            try:
                email = obj['repository']['owner']['email']
                desc = obj['repository']['description']
                homepage = obj['repository']['homepage']
                repo = obj['repository']['url']
                user = User.objects.get(email=email)
                proj = Project.objects.create(
                    name=name,
                    description=desc,
                    project_url=homepage,
                    repo=repo,
                )
                proj.users.add(user)
                log.error("Created new project %s" % (proj))
            except Exception, e:
                log.error("Error creating new project %s: %s" % (name, e))
                return HttpResponseNotFound('Build Failed')

            return HttpResponseNotFound('Build Failed')