2016-11-24 3 views
0

Je souhaite modifier via l'API XCode Bots le nom du schéma d'un bot. Une requête comme curl -XPATCH -H 'Content-Type: application/json' -H 'x-xcsclientversion: 8' https://localhost:20343/api/bots/botid123 -d '{"name": "myawesomebot2"}' pour changer le nom du bot fonctionne. Mais si j'essaie de changer l'objet de configuration avec un corps de requête comme '{"configuration": {"schemeName": "scheme2"}}' il échoue.Echec de l'édition de la configuration de l'API XCode Bots

Comment le nom du schéma peut-il être modifié?

+0

Avez-vous déjà découvert cela? Jusqu'à présent, dans mes tests, j'ai été en mesure de définir une charge utile -d JSON de '{"name": "cool_bot", "configuration": {"scheduleType": 2}}' et c'est il.Les modifications apportées à quelque chose comme sourceControlBlueprint (afin que je puisse pointer le bot vers une nouvelle branche sur le repo) semblent être ignorées ou renvoyer une "Classe d'objet (null) n'est pas une sous-classe de XCSBotConfiguration" Problèmes similaires pour vous , J'imagine? Avez-vous déjà trouvé une solution? – christopherdrum

Répondre

0

J'ai finalement trouvé cela résolu et je veux noter les pièces nécessaires pour faire ce travail et comment je l'ai trouvé.

D'abord, comme vous avez déjà remarqué, est la nécessité de -H "x-xcsclientversion: #" (note 6 a fonctionné pour moi, comme l'a découvert par un chèque de Javascript d'Apple qui reçoit la demande PATCH)

Deuxième, après avoir vu une mise à jour de Xcode Server bot par Charles, on a vu que l'URL a besoin le paramètre suivant ajouté, ?overwriteBlueprint=true

Troisièmement, il semble que les données JSON, au niveau le plus élevé que name:, exige également requiresUpgrade=false et type=1 (I found the tool jq inestimable)

Quatrièmement, les modifications apportées au sourceBlueprint nécessitent configuration.sourceControlBlueprint.DVTSourceControlWorkspaceBlueprintIdentifierKey pour recevoir un nouvel UUID. Généré facilement en bash par la commande uuidgen. Cinquième, une description de bot presque complète doit être envoyée. J'ai saisi la définition JSON du robot via l'API d'Apple, puis l'ai modifiée en utilisant jq (voir ci-dessus), en supprimant les paires clé/valeur inutiles afin de faire correspondre les propres appels d'API de Xcode Server. Les paires clé nécessaires/valeur semblent être:

  • Nom
  • Type
  • requiresUpgrade
  • configuration
  • (modifier si nécessaire, mais une configuration complète doit être envoyée)
  • groupe
  • (laisser AS- est, mais le renvoyer à travers)

Sixièmement, barre oblique inverse-toutes les barres obliques dans la charge utile JSON. Je l'ai fait dans bash avec ESCAPED_JSON=${BOT_CONFIG_JSON//\//\\\/} et j'envoie -d "$ESCAPED_JSON" dans la commande curl.

En tant que tel, la commande complète curl J'utilise devient:

curl -k --request PATCH -H "Content-Type: application/json" -H "x-xcsclientversion: 6" -d "$ESCAPED_JSON" https://<username>:<password>@<your_server_address>:20343/api/bots/<your_bot_id>?overwriteBlueprint=true 

Et une définition JSON complète (rappelez-vous, il doit avoir en avant les barres obliques échappé avant d'envoyer) se présente comme suit

<!-- language: lang-json --> 
    "requiresUpgrade": false, 
    "configuration": { 
    "triggers": [ 
     { 
     "phase": 1, 
     "scriptBody": "<REDACTED>", 
     "type": 1, 
     "name": "Update github Pending", 
     "conditions": { 
      "status": 2, 
      "onSuccess": true, 
      "onAnalyzerWarnings": true, 
      "onBuildErrors": true, 
      "onWarnings": true, 
      "onFailingTests": true 
     } 
     }, 
     { 
     "phase": 2, 
     "scriptBody": "<REDACTED>", 
     "type": 1, 
     "name": "Upload to Beta", 
     "conditions": { 
      "status": 2, 
      "onSuccess": true, 
      "onAnalyzerWarnings": true, 
      "onBuildErrors": false, 
      "onWarnings": true, 
      "onFailingTests": false 
     } 
     }, 
     { 
     "phase": 2, 
     "scriptBody": "<REDACTED>", 
     "type": 1, 
     "name": "Update github status", 
     "conditions": { 
      "status": 2, 
      "onSuccess": true, 
      "onAnalyzerWarnings": true, 
      "onBuildErrors": false, 
      "onWarnings": true, 
      "onFailingTests": false 
     } 
     } 
    ], 
    "performsUpgradeIntegration": true, 
    "disableAppThinning": true, 
    "deviceSpecification": { 
     "filters": [ 
     { 
      "platform": { 
      "_id": "3c884e2499df662057e8c64580003419", 
      "displayName": "iOS", 
      "_rev": "8-51c114fcfc83ea5f36df66f119b34ec8", 
      "simulatorIdentifier": "com.apple.platform.iphonesimulator", 
      "identifier": "com.apple.platform.iphoneos", 
      "buildNumber": "14C89", 
      "version": "10.2" 
      }, 
      "filterType": 3, 
      "architectureType": 0 
     } 
     ], 
     "deviceIdentifiers": [ 
     "6d928bd891b83b4b8592aedb42001a97", 
     "6d928bd891b83b4b8592aedb4200776c", 
     "fa737f03db7b6c04d4c7f9507100700f" 
     ] 
    }, 
    "periodicScheduleInterval": 0, 
    "schemeName": "<REDACTED>", 
    "codeCoveragePreference": 2, 
    "performsTestAction": true, 
    "scheduleType": 3, 
    "performsArchiveAction": true, 
    "builtFromClean": 2, 
    "buildConfiguration": "Release", 
    "performsAnalyzeAction": true, 
    "sourceControlBlueprint": { 
     "DVTSourceControlWorkspaceBlueprintLocationsKey": { 
     "A2739AD29C3BCDF8619D0305ACFDD0C22AEBDDB1": { 
      "DVTSourceControlWorkspaceBlueprintLocationTypeKey": "DVTSourceControlLockedRevisionLocation", 
      "DVTSourceControlLocationRevisionKey": "9d38dc7507f0f6ac17072d721893f0021c5282ed" 
     }, 
     "51DBFAD1848AC646B864BBBEDC625B8BAB305A76": { 
      "DVTSourceControlBranchIdentifierKey": "<THE BRANCH TO WATCH>", 
      "DVTSourceControlBranchOptionsKey": 4, 
      "DVTSourceControlWorkspaceBlueprintLocationTypeKey": "DVTSourceControlBranch" 
     } 
     }, 
     "DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey": "51DBFAD1848AC646B864BBBEDC625B8BAB305A76", 
     "DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey": {}, 
     "DVTSourceControlWorkspaceBlueprintRemoteRepositoryAuthenticationStrategiesKey": { 
     "A2739AD29C3BCDF8619D0305ACFDD0C22AEBDDB1": { 
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryAuthenticationTypeKey": "DVTSourceControlAuthenticationStrategy" 
     }, 
     "51DBFAD1848AC646B864BBBEDC625B8BAB305A76": { 
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryAuthenticationTypeKey": "DVTSourceControlAuthenticationStrategy" 
     } 
     }, 
     "DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey": { 
     "A2739AD29C3BCDF8619D0305ACFDD0C22AEBDDB1": 0, 
     "51DBFAD1848AC646B864BBBEDC625B8BAB305A76": 0 
     }, 
     "DVTSourceControlWorkspaceBlueprintIdentifierKey": "<GENERATE A NEW UUID FOR THIS!!!>", 
     "DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey": { 
     "A2739AD29C3BCDF8619D0305ACFDD0C22AEBDDB1": "<REDACTED PATH 1>", 
     "51DBFAD1848AC646B864BBBEDC625B8BAB305A76": "<REDACTED PATH 2>" 
     }, 
     "DVTSourceControlWorkspaceBlueprintNameKey": "Cool Blueprint", 
     "DVTSourceControlWorkspaceBlueprintVersion": 204, 
     "DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey": "<REDACTED>.xcworkspace", 
     "DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey": [ 
     { 
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey": "[email protected]:<REDACTED REPO 1>", 
      "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey": "com.apple.dt.Xcode.sourcecontrol.Git", 
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey": "A2739AD29C3BCDF8619D0305ACFDD0C22AEBDDB1" 
     }, 
     { 
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey": "[email protected]:<REDACTED REPO 2>", 
      "DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey": "com.apple.dt.Xcode.sourcecontrol.Git", 
      "DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey": "51DBFAD1848AC646B864BBBEDC625B8BAB305A76" 
     } 
     ] 
    }, 
    "exportsProductFromArchive": true, 
    "weeklyScheduleDay": 0, 
    "minutesAfterHourToIntegrate": 0, 
    "testingDestinationType": 0, 
    "hourOfIntegration": 0, 
    "testingDeviceIDs": [] 
    }, 
    "group": { 
    "name": "41A62776-A72E-44C0-BFF0-D91F699BBA6A" 
    }, 
    "type": 1, 
    "name": "My Cool Integration Bot" 

J'espère que cela aide.

+0

de manière similaire xcode met à jour les robots. il envoie un objet config json presque complet. envoyer uniquement la propriété mise à jour ne semble pas fonctionner. même si la documentation dit que cela devrait fonctionner. – ideveloper

+0

Exactement correct. En fin de compte, mon succès est venu de mimer ce que Xcode fait aussi précisément que possible, y compris l'envoi de données qui ne semble pas nécessaire (pourquoi renvoyer chaque script d'intégration?!) – christopherdrum