@@ -543,6 +543,28 @@ func (s *server) acquireProtoJob(ctx context.Context, job database.ProvisionerJo
543
543
return nil ,failJob (fmt .Sprintf ("convert workspace transition: %s" ,err ))
544
544
}
545
545
546
+ // A previous workspace build exists
547
+ var lastWorkspaceBuildParameters []database.WorkspaceBuildParameter
548
+ if workspaceBuild .BuildNumber > 1 {
549
+ // TODO: Should we fetch the last build that succeeded? This fetches the
550
+ // previous build regardless of the status of the build.
551
+ buildNum := workspaceBuild .BuildNumber - 1
552
+ previous ,err := s .Database .GetWorkspaceBuildByWorkspaceIDAndBuildNumber (ctx , database.GetWorkspaceBuildByWorkspaceIDAndBuildNumberParams {
553
+ WorkspaceID :workspaceBuild .WorkspaceID ,
554
+ BuildNumber :buildNum ,
555
+ })
556
+ if err != nil && ! xerrors .Is (err ,sql .ErrNoRows ) {
557
+ return nil ,xerrors .Errorf ("get last build with number=%d: %w" ,buildNum ,err )
558
+ }
559
+
560
+ if err == nil {
561
+ lastWorkspaceBuildParameters ,err = s .Database .GetWorkspaceBuildParameters (ctx ,previous .ID )
562
+ if err != nil {
563
+ return nil ,xerrors .Errorf ("get last build parameters %q: %w" ,previous .ID ,err )
564
+ }
565
+ }
566
+ }
567
+
546
568
workspaceBuildParameters ,err := s .Database .GetWorkspaceBuildParameters (ctx ,workspaceBuild .ID )
547
569
if err != nil {
548
570
return nil ,failJob (fmt .Sprintf ("get workspace build parameters: %s" ,err ))
@@ -619,12 +641,13 @@ func (s *server) acquireProtoJob(ctx context.Context, job database.ProvisionerJo
619
641
620
642
protoJob .Type = & proto.AcquiredJob_WorkspaceBuild_ {
621
643
WorkspaceBuild :& proto.AcquiredJob_WorkspaceBuild {
622
- WorkspaceBuildId :workspaceBuild .ID .String (),
623
- WorkspaceName :workspace .Name ,
624
- State :workspaceBuild .ProvisionerState ,
625
- RichParameterValues :convertRichParameterValues (workspaceBuildParameters ),
626
- VariableValues :asVariableValues (templateVariables ),
627
- ExternalAuthProviders :externalAuthProviders ,
644
+ WorkspaceBuildId :workspaceBuild .ID .String (),
645
+ WorkspaceName :workspace .Name ,
646
+ State :workspaceBuild .ProvisionerState ,
647
+ RichParameterValues :convertRichParameterValues (workspaceBuildParameters ),
648
+ PreviousParameterValues :convertRichParameterValues (lastWorkspaceBuildParameters ),
649
+ VariableValues :asVariableValues (templateVariables ),
650
+ ExternalAuthProviders :externalAuthProviders ,
628
651
Metadata :& sdkproto.Metadata {
629
652
CoderUrl :s .AccessURL .String (),
630
653
WorkspaceTransition :transition ,