Introducing alpha support for adding Forge to your existing Connect app

Great, thanks, James. I just gave these changes a try. Deployment and installation worked this time :+1:

A post was split to a new topic: Accessing auth tokens in Forge

Thanks for thoughts, questions, and feedback on the Forge + Connect alpha. Going forward, please open new threads using #forge-connect

Hello,

My Forge descriptor leads to RequestValidationError too. Could you please help me to realize what is composed wrong?

---
connectModules:
  jira:lifecycle:
    installed: "/install"
    uninstalled: "/uninstall"
  jira:jiraIssueTabPanels:
    - url: "/jira/issue-tab?issueId={issue.id}&issueKey={issue.key}"
      weight: 100
      key: "jtc-issue-tab"
      name:
        value: "TeamCity"
      conditions:
        - condition: "has_project_permission"
          params:
            permission: "VIEW_DEV_TOOLS"
  jira:jiraBuildInfoProvider:
    homeUrl: "https://marketplace.atlassian.com/apps/1210766/teamcity-integration-for-jira"
    logoUrl: "https://ykarnilaev-jtc.eu.ngrok.io/assets/images/tc-logo-30x30.svg"
    documentationUrl: "https://docs.stiltsoft.com/display/public/JTC/TeamCity+Integration+for+JIRA"
    actions: {}
    name:
      value: "TeamCity"
    key: "build-provider"
  jira:jiraDeploymentInfoProvider:
    homeUrl: "https://marketplace.atlassian.com/apps/1210766/teamcity-integration-for-jira"
    logoUrl: "https://ykarnilaev-jtc.eu.ngrok.io/assets/images/tc-logo-30x30.svg"
    documentationUrl: "https://docs.stiltsoft.com/display/public/JTC/TeamCity+Integration+for+JIRA"
    name:
      value: "TeamCity"
    key: "deployment-provider"
  jira:configurePage:
    name:
      value: "TeamCity Servers"
    key: "teamcity-servers"
    url: "/admin/teamcity-servers/overview"
  jira:postInstallPage:
    [
      {
        url: "/admin/getting-started",
        key: "getting-started",
        name: {
          value: "TeamCity Servers"
        }
      }
    ]
  jira:adminPages:
    - name:
        value: "Troubleshooting"
      key: "troubleshooting"
      url: "/admin/troubleshooting/overview"
      location: "admin_plugins_menu/jtc-admin-section"
  jira:dialogs:
    - key: "teamcity-dialog"
      url: "/admin/teamcity-servers/add.dialog"
      options:
        size: "maximum"
  jira:generalPages:
    - name:
        value: "Delete TeamCity"
      key: "delete-teamcity-dialog"
      url: "/admin/teamcity-servers/delete.dialog"
      location: "none"
    - name:
        value: "Reindex TeamCity"
      key: "reindex-teamcity-dialog"
      url: "/admin/troubleshooting/reindex.dialog"
      location: "none"
  jira:webSections:
    - location: "admin_plugins_menu"
      weight: 15
      key: "jtc-admin-section"
      name:
        value: "TeamCity Configuration"
  jira:webItems:
    - url: "/plugins/servlet/ac/com.stiltsoft.jira.teamcity/teamcity-servers"
      location: "admin_plugins_menu/jtc-admin-section"
      context: "product"
      weight: 10
      target:
        type: "page"
      tooltip:
        value: "TeamCity Servers"
      key: "jtc-servers-admin-web-item"
      name:
        value: "TeamCity Servers"
      conditions:
        - condition: "user_is_admin"
          invert: false
    - location: "jira.project.sidebar.plugins.navigation"
      key: "jtc-project-panel-link"
      url: "/projects/{project.key}?selectedItem=com.stiltsoft.jira.teamcity__jtc-project-panel-link"
      context: "product"
      name:
        value: "TeamCity"
      icon:
        width: 25
        height: 25
        url: "/assets/images/app-icon-dark.svg"
      conditions:
        - or:
            - condition: "project_type"
              params:
                projectTypeKey: "software"
            - condition: "project_type"
              params:
                projectTypeKey: "service_desk"
        - condition: "has_project_permission"
          params:
            permission: "VIEW_DEV_TOOLS"
  jira:webPanels:
    - key: "jtc-project-web-panel"
      url: "/jira/project-tab?projectId={project.id}&projectKey={project.key}"
      location: "com.stiltsoft.jira.teamcity__jtc-project-panel-link"
      name:
        value: "TeamCity Web Panel"
      conditions:
        - condition: "has_project_permission"
          params:
            permission: "VIEW_DEV_TOOLS"
permissions:
  scopes: ["read:connect-jira", "write:connect-jira", "delete:connect-jira"]
remotes:
  - key: connect
    baseUrl: https://ykarnilaev-jtc.eu.ngrok.io
app:
  id: ari:cloud:ecosystem::app/3ac60cac-9448-4de2-8e26-67202b4a09ee
  connect:
    key: com.stiltsoft.jira.teamcity
    remote: connect

Hi @YuriKarnilaev ,

Apologies for the slow reply. jira:lifecycle: should be an array rather than an object, and should have a key field.

I’ve raised a bug report so that in future, instead of just a cryptic “schema validation error” message, the error is reported properly.

Going forward, please open new threads using #forge-connect

Cheers,
James

2 Likes

Hello @jhazelwood,

Thank you for your answer.

I’ve changed the jira:lifecycle block to the following

  jira:lifecycle:
    [
      {
        "key": "connect-lifecycle",
        "installed": "/install",
        "uninstalled": "/uninstall"

      }
    ]

and still get the error

  ◀️  GraphQL
Request ID: 23293943d83ea5c4
Result: {
  "appDeployment": {
    "status": "FAILED",
    "errorDetails": {
      "code": "ENVIRONMENT_UPDATE_VALIDATION_FAILED",
      "message": "Manifest validation failed",
      "fields": {
        "validationResult": {
          "tid": "b2d0ec760c2a60fd",
          "code": 400,
          "type": "APIError",
          "message": "RequestValidationError RequestValidationError: Schema validation error "
        }
      }
    },
    "stages": [
      {
        "description": "Validating manifest",
        "events": [
          {
            "__typename": "AppDeploymentTransitionEvent",
            "stepName": "Init deployment",
            "createdAt": "2022-09-10T16:07:40.228Z",
            "newStatus": "STARTED"
          },
          {
            "__typename": "AppDeploymentTransitionEvent",
            "stepName": "Init deployment",
            "createdAt": "2022-09-10T16:07:40.710Z",
            "newStatus": "DONE"
          },
          {
            "__typename": "AppDeploymentTransitionEvent",
            "stepName": "Download manifest",
            "createdAt": "2022-09-10T16:07:40.712Z",
            "newStatus": "STARTED"
          },
          {
            "__typename": "AppDeploymentLogEvent",
            "stepName": "Download manifest",
            "createdAt": "2022-09-10T16:07:40.713Z",
            "message": "Upload URL is valid",
            "level": "INFO"
          },
          {
            "__typename": "AppDeploymentLogEvent",
            "stepName": "Download manifest",
            "createdAt": "2022-09-10T16:07:40.930Z",
            "message": "Found manifest file",
            "level": "INFO"
          },
          {
            "__typename": "AppDeploymentLogEvent",
            "stepName": "Download manifest",
            "createdAt": "2022-09-10T16:07:40.936Z",
            "message": "Manifest is a valid YAML",
            "level": "INFO"
          },
          {
            "__typename": "AppDeploymentTransitionEvent",
            "stepName": "Download manifest",
            "createdAt": "2022-09-10T16:07:40.938Z",
            "newStatus": "DONE"
          },
          {
            "__typename": "AppDeploymentTransitionEvent",
            "stepName": "Validate manifest",
            "createdAt": "2022-09-10T16:07:40.940Z",
            "newStatus": "STARTED"
          },
          {
            "__typename": "AppDeploymentLogEvent",
            "stepName": "Validate manifest",
            "createdAt": "2022-09-10T16:07:40.978Z",
            "message": "Manifest validation failed\nValidation errors: {\n  \"validationResult\": {\n    \"tid\": \"b2d0ec760c2a60fd\",\n    \"code\": 400,\n    \"type\": \"APIError\",\n    \"message\": \"RequestValidationError RequestValidationError: Schema validation error \"\n  }\n}",
            "level": "WARNING"
          },
          {
            "__typename": "AppDeploymentTransitionEvent",
            "stepName": "Validate manifest",
            "createdAt": "2022-09-10T16:07:40.980Z",
            "newStatus": "FAILED"
          }
        ]
      },
      {
        "description": "Snapshotting functions",
        "events": []
      },
      {
        "description": "Deploying to environment",
        "events": []
      }
    ]
  }
}
  Found manifest file
  Manifest is a valid YAML
  Manifest validation failed
Validation errors: {
  "validationResult": {
    "tid": "b2d0ec760c2a60fd",
    "code": 400,
    "type": "APIError",
    "message": "RequestValidationError RequestValidationError: Schema validation error "
  }
}

Error: Deployment failed

Could you please tell me what goes wrong?

Hello again, @YuriKarnilaev ,

jira:configurePage: , jira:jiraDeploymentInfoProvider: and jira:jiraBuildInfoProvider: also need to be arrays.

Going forward, please open new threads using #forge-connect

Cheers,
James

1 Like

@jhazelwood,

Thanks a lot!
Sorry, I’ll open a new thread using #forge-connect if I face any other validating errors.