77
88var express = require ( 'express' ) ;
99var app = module . exports = express ( ) ;
10+ var uuid = require ( 'uuid' ) ;
1011
1112var mw = require ( 'dat-middleware' ) ;
1213var flow = require ( 'middleware-flow' ) ;
@@ -27,6 +28,7 @@ var isPopulatedArray = validations.isPopulatedArray;
2728var transformations = require ( 'middlewares/transformations' ) ;
2829var mavis = require ( 'middlewares/apis' ) . mavis ;
2930var docker = require ( 'middlewares/apis' ) . docker ;
31+ var runnable = require ( 'middlewares/apis' ) . runnable ;
3032var error = require ( 'error' ) ;
3133var ownerIsHelloRunnable = require ( 'middlewares/owner-is-hello-runnable' ) ;
3234
@@ -208,10 +210,45 @@ app.post('/contexts/:contextId/versions/:id/actions/copy',
208210 checkFound ( 'contextVersion' ) ,
209211 // only supports deep copy for now
210212 mw . query ( 'deep' ) . require ( ) . validate ( validations . equals ( 'true' ) ) ,
211- contextVersions . createDeepCopy ( 'sessionUser' , 'contextVersion' ) ,
213+ mw . req ( 'context.owner.github' ) . require ( )
214+ . validate ( validations . equals ( process . env . HELLO_RUNNABLE_GITHUB_ID ) )
215+ . validate ( validations . notEqualsKeypath ( 'sessionUser.accounts.github.id' ) )
216+ . then (
217+ // if the build owner is hello-runnable and user is not hello-runnable
218+ deepCopyCvFromHelloRunnable ( 'contextVersion' )
219+ ) . else (
220+ contextVersions . createDeepCopy ( 'sessionUser' , 'contextVersion' ) ) ,
212221 mw . res . status ( 201 ) ,
213222 mw . res . json ( 'contextVersion' ) ) ;
214223
224+ function deepCopyCvFromHelloRunnable ( cvKey ) {
225+ return flow . series (
226+ // maybe error if the contextVersion has acvs?
227+ // make a new context
228+ mw . req ( 'contextVersion' , cvKey ) ,
229+ mw . body ( ) . pick ( 'owner' ) ,
230+ runnable . create ( { } , 'sessionUser' ) ,
231+ // create context requires name
232+ function ( req , res , next ) {
233+ req . body . name = uuid ( ) ;
234+ next ( ) ;
235+ } ,
236+ runnable . model . createContext ( 'body' ) ,
237+ mw . req ( ) . set ( 'newContext' , 'runnableResult' ) ,
238+ // make a new context-version
239+ runnable . create ( { } , 'sessionUser' ) ,
240+ runnable . model . createContextVersion ( 'newContext._id' ) ,
241+ mw . req ( ) . set ( 'newContextVersion' , 'runnableResult' ) ,
242+ // use infracodeversion copy route to copy the files
243+ runnable . create ( { } , 'sessionUser' ) ,
244+ runnable . model . copyVersionIcvFiles (
245+ 'newContext._id' ,
246+ 'newContextVersion._id' ,
247+ 'contextVersion.infraCodeVersion' ) ,
248+ contextVersions . findById ( 'newContextVersion._id' )
249+ ) ;
250+ }
251+
215252/** Builds a context version
216253 * used internally (github hook, build build), session user may not be real
217254 * @param id versionId of the source version
0 commit comments