build trigger chaining (build same revision for entire chain)

View: New views
3 Messages — Rating Filter:   Alert me  

build trigger chaining (build same revision for entire chain)

by Bil Kleb :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

Does anyone know how to (or have a patch for) chaining a
series of builds so that each build in the chain builds
the triggering build's revision and not the latest revision
available from source control?

We have a series of builds that, if they all pass, the
final one builds a release.

This was my patch to 1.2.1,

*** cruisecontrolrb-1.2.1/app/models/successful_build_trigger.rb       2007-11-04 15:06:49.000000000 -0500
--- cruisecontrolrb-1.2.1-hacked/app/models/successful_build_trigger.rb        2008-04-04 06:58:28.000000000 -0400
***************
*** 16,22 ****
         []
       else
         @last_successful_build = new_last_successful_build
!       [@triggered_project.last_locally_known_revision]
       end
     end

--- 16,22 ----
         []
       else
         @last_successful_build = new_last_successful_build
!       [Revision.new(@last_successful_build.revision)]
       end
     end

but I'm failing to see how to translate this to 1.3.x.

Thanks,
--
Bil Kleb
http://fun3d.larc.nasa.gov
_______________________________________________
Cruisecontrolrb-users mailing list
Cruisecontrolrb-users@...
http://rubyforge.org/mailman/listinfo/cruisecontrolrb-users

Re: build trigger chaining (build same revision for entire chain)

by Chad Woolley :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Fri, May 22, 2009 at 4:06 PM, Bil Kleb <Bil.Kleb@...> wrote:
> but I'm failing to see how to translate this to 1.3.x.

Check Project#build_if_necessary
It says:  return build(source_control.latest_revision, reasons)

This now hardcodes to build the latest revision.

To accomplish what you want, maybe you could add a #revision_to_build
property on SuccessfulBuildTrigger, and use that instead of
latest_revision.  This would be an API change to the trigger, though,
so you'd probably want to default to the latest revision if there was
no #revision_to_build property or it was nil.

-- Chad
_______________________________________________
Cruisecontrolrb-users mailing list
Cruisecontrolrb-users@...
http://rubyforge.org/mailman/listinfo/cruisecontrolrb-users

Re: build trigger chaining (build same revision for entire chain)

by Bil Kleb :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Chad Woolley wrote:

>
> Check Project#build_if_necessary
> It says:  return build(source_control.latest_revision, reasons)
>
> This now hardcodes to build the latest revision.
>
> To accomplish what you want, maybe you could add a #revision_to_build
> property on SuccessfulBuildTrigger, and use that instead of
> latest_revision.  This would be an API change to the trigger, though,
> so you'd probably want to default to the latest revision if there was
> no #revision_to_build property or it was nil.

Thanks for the sketch.

For posterity's sake, here's the hack we cobbled together:

diff --git a/app/models/project.rb b/app/models/project.rb
index 5784d2e..e6c23a6 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -210,7 +210,11 @@ class Project
      begin
        if build_necessary?(reasons = [])
          remove_build_requested_flag_file if build_requested?
-        return build(source_control.latest_revision, reasons)
+        revision = source_control.latest_revision
+        if (triggered_by.first.respond_to?(:revision_to_build) )
+          revision = triggered_by.first.revision_to_build
+        end
+        return build(revision, reasons)
        else
          return nil
        end
@@ -523,4 +527,4 @@ def plugin_loader.load_all

  end

-plugin_loader.load_all
\ No newline at end of file
+plugin_loader.load_all
diff --git a/app/models/successful_build_trigger.rb b/app/models/successful_build_trig
index a768332..7816a79 100644
--- a/app/models/successful_build_trigger.rb
+++ b/app/models/successful_build_trigger.rb
@@ -40,6 +40,11 @@ class SuccessfulBuildTrigger
      @triggering_project = Project.new(value.to_s)
    end

+  def revision_to_build
+    number = last_successful(@triggering_project.builds).revision
+    SourceControl::Subversion::Revision.new(number)
+  end
+
    private

Regards,
--
Bil Kleb
http://fun3d.larc.nas.gov
_______________________________________________
Cruisecontrolrb-users mailing list
Cruisecontrolrb-users@...
http://rubyforge.org/mailman/listinfo/cruisecontrolrb-users