@@ -1485,6 +1485,177 @@ func TestCraftWorkflowRunCustomVersion_File(t *testing.T) {
1485
1485
require .Equal (t , "6.6.6-1.sha.g" + wrDB .Contexts .Git .ShaShort , wrDB .Contexts .CDS .Version )
1486
1486
}
1487
1487
1488
+ func TestCraftWorkflowRunCustomVersion_PoetryProject (t * testing.T ) {
1489
+ api , db , _ := newTestAPI (t )
1490
+ ctx := context .TODO ()
1491
+
1492
+ db .Exec ("DELETE FROM rbac" )
1493
+ db .Exec ("DELETE FROM region" )
1494
+
1495
+ reg := sdk.Region {Name : "build" }
1496
+ require .NoError (t , region .Insert (ctx , db , & reg ))
1497
+
1498
+ proj := assets .InsertTestProject (t , db , api .Cache , sdk .RandomString (10 ), sdk .RandomString (10 ))
1499
+ admin , _ := assets .InsertAdminUser (t , db )
1500
+ assets .InsertRBAcProject (t , db , sdk .ProjectRoleRead , proj .Key , * admin )
1501
+
1502
+ vcsProject := assets .InsertTestVCSProject (t , db , proj .ID , "bitbucketserver" , "bitbucketserver" )
1503
+ repo := assets .InsertTestProjectRepository (t , db , proj .Key , vcsProject .ID , "my/repo" )
1504
+
1505
+ wkName := sdk .RandomString (10 )
1506
+ wr := sdk.V2WorkflowRun {
1507
+ DeprecatedUserID : admin .ID ,
1508
+ ProjectKey : proj .Key ,
1509
+ Status : sdk .V2WorkflowRunStatusCrafting ,
1510
+ VCSServerID : vcsProject .ID ,
1511
+ RepositoryID : repo .ID ,
1512
+ RunNumber : 1 ,
1513
+ RunAttempt : 0 ,
1514
+ WorkflowRef : "refs/heads/master" ,
1515
+ WorkflowSha : "123456789" ,
1516
+ WorkflowName : wkName ,
1517
+ WorkflowData : sdk.V2WorkflowRunData {
1518
+ Workflow : sdk.V2Workflow {
1519
+ Name : wkName ,
1520
+ Semver : & sdk.WorkflowSemver {
1521
+ From : "poetry" ,
1522
+ Path : "pyproject.toml" ,
1523
+ ReleaseRefs : []string {"refs/heads/mai*" },
1524
+ },
1525
+ Jobs : map [string ]sdk.V2Job {
1526
+ "job1" : {
1527
+ Name : "My super job" ,
1528
+ If : "cds.workflow == 'toto'" ,
1529
+ Region : "build" ,
1530
+ RunsOn : sdk.V2JobRunsOn {
1531
+ Model : "myworker-model" ,
1532
+ },
1533
+ Steps : []sdk.ActionStep {
1534
+ {
1535
+ Run : "echo toto" ,
1536
+ },
1537
+ },
1538
+ },
1539
+ },
1540
+ },
1541
+ },
1542
+ RunEvent : sdk.V2WorkflowRunEvent {
1543
+ HookType : sdk .WorkflowHookTypeRepository ,
1544
+ Payload : nil ,
1545
+ Ref : "refs/heads/main" ,
1546
+ Sha : "123456789" ,
1547
+ EventName : sdk .WorkflowHookEventNamePush ,
1548
+ },
1549
+ }
1550
+ require .NoError (t , workflow_v2 .InsertRun (ctx , db , & wr ))
1551
+
1552
+ myWMEnt := sdk.Entity {
1553
+ ProjectKey : proj .Key ,
1554
+ ProjectRepositoryID : repo .ID ,
1555
+ Type : sdk .EntityTypeWorkerModel ,
1556
+ FilePath : ".cds/worker-models/myworker-model.yml" ,
1557
+ Name : "myworker-model" ,
1558
+ Ref : "refs/heads/master" ,
1559
+ Commit : "123456789" ,
1560
+ LastUpdate : time.Time {},
1561
+ Data : "name: myworkermodel" ,
1562
+ }
1563
+ require .NoError (t , entity .Insert (ctx , db , & myWMEnt ))
1564
+
1565
+ // Mock VCS
1566
+ s , _ := assets .InsertService (t , db , t .Name ()+ "_VCS" , sdk .TypeVCS )
1567
+ // Setup a mock for all services called by the API
1568
+ ctrl := gomock .NewController (t )
1569
+ defer ctrl .Finish ()
1570
+ servicesClients := mock_services .NewMockClient (ctrl )
1571
+ services .NewClient = func (_ []sdk.Service ) services.Client {
1572
+ return servicesClients
1573
+ }
1574
+ defer func () {
1575
+ _ = services .Delete (db , s )
1576
+ services .NewClient = services .NewDefaultClient
1577
+ }()
1578
+
1579
+ servicesClients .EXPECT ().
1580
+ DoJSONRequest (gomock .Any (), "GET" , "/vcs/bitbucketserver/repos/my/repo/content/pyproject.toml?commit=123456789" , gomock .Any (), gomock .Any (), gomock .Any ()).
1581
+ DoAndReturn (func (ctx context.Context , method , path string , in interface {}, out interface {}, _ interface {}) (http.Header , int , error ) {
1582
+ b := & sdk.VCSContent {
1583
+ IsFile : true ,
1584
+ Content : `[tool.poetry]
1585
+ name = "poetry"
1586
+ version = "2.0.0"
1587
+ description = "Python dependency management and packaging made easy."
1588
+ authors = []
1589
+ maintainers = []
1590
+ license = "MIT"
1591
+ readme = "README.md"
1592
+ [project]
1593
+ name = "my-awesome-package"
1594
+ version = "0.1.0"
1595
+ description = "A short description"
1596
+ authors = ["Jane Doe <[email protected] >"]
1597
+ dependencies = [
1598
+ "requests >=2.25.1",
1599
+ ]` ,
1600
+ }
1601
+ * (out .(* sdk.VCSContent )) = * b
1602
+ return nil , 200 , nil
1603
+ }).Times (2 )
1604
+
1605
+ servicesClients .EXPECT ().
1606
+ DoJSONRequest (gomock .Any (), "GET" , "/vcs/bitbucketserver/repos/my/repo" , gomock .Any (), gomock .Any (), gomock .Any ()).
1607
+ DoAndReturn (
1608
+ func (ctx context.Context , method , path string , in interface {}, out interface {}, _ interface {}) (http.Header , int , error ) {
1609
+ b := & sdk.VCSRepo {}
1610
+ * (out .(* sdk.VCSRepo )) = * b
1611
+ return nil , 200 , nil
1612
+ },
1613
+ ).Times (2 )
1614
+
1615
+ // Create hatchery
1616
+ hatch := sdk.Hatchery {Name : sdk .RandomString (10 ), ModelType : "" }
1617
+ require .NoError (t , hatchery .Insert (ctx , db , & hatch ))
1618
+
1619
+ require .NoError (t , rbac .Insert (ctx , db , & sdk.RBAC {
1620
+ Name : sdk .RandomString (10 ),
1621
+ Hatcheries : []sdk.RBACHatchery {
1622
+ {
1623
+ RegionID : reg .ID ,
1624
+ HatcheryID : hatch .ID ,
1625
+ Role : sdk .HatcheryRoleSpawn ,
1626
+ },
1627
+ },
1628
+ }))
1629
+
1630
+ require .NoError (t , api .craftWorkflowRunV2 (ctx , wr .ID ))
1631
+
1632
+ wrDB , err := workflow_v2 .LoadRunByID (ctx , db , wr .ID )
1633
+ require .NoError (t , err )
1634
+ assert .Equal (t , wrDB .Status , sdk .V2WorkflowRunStatusBuilding )
1635
+ wrInfos , err := workflow_v2 .LoadRunInfosByRunID (ctx , db , wr .ID )
1636
+ require .NoError (t , err )
1637
+ require .Equal (t , 0 , len (wrInfos ), "Error found: %v" , wrInfos )
1638
+
1639
+ require .Equal (t , "0.1.0" , wrDB .Contexts .CDS .Version )
1640
+
1641
+ version , err := workflow_v2 .LoadWorkflowVersion (ctx , db , wrDB .Contexts .CDS .ProjectKey , wrDB .Contexts .CDS .WorkflowVCSServer , wrDB .Contexts .CDS .WorkflowRepository , wrDB .Contexts .CDS .Workflow , "0.1.0" )
1642
+ require .NoError (t , err )
1643
+
1644
+ require .NotNil (t , version )
1645
+
1646
+ // Update the run and craft it again
1647
+ wrDB .Status = sdk .V2WorkflowRunStatusCrafting
1648
+ require .NoError (t , workflow_v2 .UpdateRun (ctx , db , wrDB ))
1649
+ require .NoError (t , api .craftWorkflowRunV2 (ctx , wrDB .ID ))
1650
+
1651
+ wrDB , err = workflow_v2 .LoadRunByID (ctx , db , wr .ID )
1652
+ require .NoError (t , err )
1653
+ versions , err := workflow_v2 .LoadAllVerionsByWorkflow (ctx , db , wrDB .Contexts .CDS .ProjectKey , wrDB .Contexts .CDS .WorkflowVCSServer , wrDB .Contexts .CDS .WorkflowRepository , wrDB .Contexts .CDS .Workflow )
1654
+ require .NoError (t , err )
1655
+ require .Equal (t , 1 , len (versions ))
1656
+ require .Equal (t , "0.1.0-1.sha.g" + wrDB .Contexts .Git .ShaShort , wrDB .Contexts .CDS .Version )
1657
+ }
1658
+
1488
1659
func TestCraftWorkflowRunCustomVersion_Poetry (t * testing.T ) {
1489
1660
api , db , _ := newTestAPI (t )
1490
1661
ctx := context .TODO ()
0 commit comments