cortexapps-cli 1.33.0__tar.gz → 1.35.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (214) hide show
  1. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/PKG-INFO +1 -1
  2. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/cli.py +2 -0
  3. cortexapps_cli-1.35.0/cortexapps_cli/commands/scaffolders.py +156 -0
  4. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/solutions.py +3 -3
  5. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/_lib/setup_base.py +5 -0
  6. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/github-actions-deploy/setup.py +1 -3
  7. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/harness-deploy/setup.py +1 -1
  8. cortexapps_cli-1.35.0/cortexapps_cli/solutions/workday/README.md +137 -0
  9. cortexapps_cli-1.35.0/cortexapps_cli/solutions/workday/data/configuration.json +31 -0
  10. cortexapps_cli-1.35.0/cortexapps_cli/solutions/workday/data/pied-piper-supervisory-org.json +113 -0
  11. cortexapps_cli-1.35.0/cortexapps_cli/solutions/workday/setup.py +145 -0
  12. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/pyproject.toml +1 -1
  13. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/LICENSE +0 -0
  14. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/README.rst +0 -0
  15. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/__init__.py +0 -0
  16. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/command_options.py +0 -0
  17. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/ai_skills.py +0 -0
  18. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/api_keys.py +0 -0
  19. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/audit_logs.py +0 -0
  20. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/backup.py +0 -0
  21. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/backup_commands/cortex_export.py +0 -0
  22. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/catalog.py +0 -0
  23. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/custom_data.py +0 -0
  24. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/custom_events.py +0 -0
  25. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/custom_metrics.py +0 -0
  26. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/dependencies.py +0 -0
  27. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/deploys.py +0 -0
  28. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/discovery_audit.py +0 -0
  29. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/docs.py +0 -0
  30. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/entity_relationship_types.py +0 -0
  31. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/entity_relationships.py +0 -0
  32. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/entity_types.py +0 -0
  33. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/gitops_logs.py +0 -0
  34. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/groups.py +0 -0
  35. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/initiatives.py +0 -0
  36. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations.py +0 -0
  37. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/apiiro.py +0 -0
  38. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/argocd.py +0 -0
  39. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/aws.py +0 -0
  40. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/azure_active_directory.py +0 -0
  41. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/azure_devops.py +0 -0
  42. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/azure_resources.py +0 -0
  43. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/bamboohr.py +0 -0
  44. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/bitbucket.py +0 -0
  45. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/bugsnag.py +0 -0
  46. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/buildkite.py +0 -0
  47. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/checkmarx_sast.py +0 -0
  48. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/circleci.py +0 -0
  49. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/clickup.py +0 -0
  50. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/codecov.py +0 -0
  51. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/coralogix.py +0 -0
  52. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/datadog.py +0 -0
  53. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/dynatrace.py +0 -0
  54. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/firehydrant.py +0 -0
  55. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/github.py +0 -0
  56. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/gitlab.py +0 -0
  57. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/harness.py +0 -0
  58. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/incidentio.py +0 -0
  59. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/instana.py +0 -0
  60. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/jenkins.py +0 -0
  61. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/jira.py +0 -0
  62. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/launchdarkly.py +0 -0
  63. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/mend_sast.py +0 -0
  64. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/mend_sca.py +0 -0
  65. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/newrelic.py +0 -0
  66. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/okta.py +0 -0
  67. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/opsgenie.py +0 -0
  68. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/pagerduty.py +0 -0
  69. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/prometheus.py +0 -0
  70. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/rollbar.py +0 -0
  71. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/rootly.py +0 -0
  72. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/semgrep.py +0 -0
  73. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/sentry.py +0 -0
  74. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/servicenow.py +0 -0
  75. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/servicenow_cloud_observability.py +0 -0
  76. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/snyk.py +0 -0
  77. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/sonarqube.py +0 -0
  78. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/splunk_observability_cloud.py +0 -0
  79. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/splunk_on_call.py +0 -0
  80. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/sumologic.py +0 -0
  81. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/veracode.py +0 -0
  82. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/wiz.py +0 -0
  83. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/workday.py +0 -0
  84. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/integrations_commands/xmatters.py +0 -0
  85. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/ip_allowlist.py +0 -0
  86. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/on_call.py +0 -0
  87. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/packages.py +0 -0
  88. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/packages_commands/go.py +0 -0
  89. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/packages_commands/java.py +0 -0
  90. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/packages_commands/node.py +0 -0
  91. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/packages_commands/nuget.py +0 -0
  92. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/packages_commands/python.py +0 -0
  93. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/plugins.py +0 -0
  94. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/queries.py +0 -0
  95. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/rest.py +0 -0
  96. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/scim.py +0 -0
  97. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/scorecards.py +0 -0
  98. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/scorecards_commands/exemptions.py +0 -0
  99. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/secrets.py +0 -0
  100. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/teams.py +0 -0
  101. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/users.py +0 -0
  102. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/users_commands/roles.py +0 -0
  103. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/commands/workflows.py +0 -0
  104. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/cortex_client.py +0 -0
  105. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/models/team.py +0 -0
  106. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/__init__.py +0 -0
  107. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/_lib/__init__.py +0 -0
  108. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-agents/README.md +0 -0
  109. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-agents/catalog/address-reviews.yaml +0 -0
  110. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-agents/catalog/audit-flags.yaml +0 -0
  111. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-agents/catalog/code-review.yaml +0 -0
  112. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-agents/catalog/fix-issue.yaml +0 -0
  113. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-agents/catalog/incident-trends.yaml +0 -0
  114. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-agents/catalog/jira-to-kb.yaml +0 -0
  115. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-agents/catalog/release-to-sha.yaml +0 -0
  116. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-agents/catalog/search-troubleshooting-kb.yaml +0 -0
  117. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-agents/catalog/simplify-test.yaml +0 -0
  118. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-agents/entity-types/ai-agent.json +0 -0
  119. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-agents/scorecards/ai-agent-governance.yaml +0 -0
  120. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-skills/README.md +0 -0
  121. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-skills/catalog/api-doc-sync.yaml +0 -0
  122. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-skills/catalog/changelog-writer.yaml +0 -0
  123. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-skills/catalog/docs-generator.yaml +0 -0
  124. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-skills/catalog/docs-portal.yaml +0 -0
  125. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-skills/entity-relationship-types/ai-plugin-service.json +0 -0
  126. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-skills/entity-relationship-types/ai-plugin-skills.json +0 -0
  127. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-skills/entity-relationship-types/ai-skill-service.json +0 -0
  128. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-skills/entity-types/ai-plugin.json +0 -0
  129. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-skills/entity-types/ai-skill.json +0 -0
  130. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-skills/scorecards/ai-skills-quality.yaml +0 -0
  131. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/.github/workflows/sync-claude-spend.yaml +0 -0
  132. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/README.md +0 -0
  133. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/catalog/employee-alice-chen.yaml +0 -0
  134. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/catalog/employee-bob-martinez.yaml +0 -0
  135. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/catalog/employee-carol-kim.yaml +0 -0
  136. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/catalog/employee-david-osei.yaml +0 -0
  137. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/catalog/employee-emma-johnson.yaml +0 -0
  138. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/catalog/team-data.yaml +0 -0
  139. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/catalog/team-engineering.yaml +0 -0
  140. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/catalog/team-frontend.yaml +0 -0
  141. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/catalog/team-platform.yaml +0 -0
  142. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/custom-metrics/ai-spend.json +0 -0
  143. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/entity-relationship-types/team-member.json +0 -0
  144. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/entity-types/employee.json +0 -0
  145. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/plugins/team-ai-spend.json +0 -0
  146. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/scorecards/ai-spend-scorecard.yaml +0 -0
  147. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/ai-spend/scripts/sync-claude-spend.py +0 -0
  148. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/.github/workflows/cortex-service-version.yaml +0 -0
  149. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/README.md +0 -0
  150. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/api-gateway-3.0.1.yaml +0 -0
  151. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/api-gateway-3.1.0.yaml +0 -0
  152. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/api-gateway-3.1.1.yaml +0 -0
  153. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/api-gateway.yaml +0 -0
  154. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/auth-2.1.0.yaml +0 -0
  155. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/auth-2.1.1.yaml +0 -0
  156. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/auth-2.2.0.yaml +0 -0
  157. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/auth.yaml +0 -0
  158. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/aws-dev-us-west-2.yaml +0 -0
  159. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/billing-1.1.0.yaml +0 -0
  160. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/billing-1.2.0.yaml +0 -0
  161. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/billing.yaml +0 -0
  162. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/cart-1.0.2.yaml +0 -0
  163. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/cart.yaml +0 -0
  164. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/checkout-2.2.0.yaml +0 -0
  165. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/checkout-2.3.0.yaml +0 -0
  166. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/checkout-2.4.0.yaml +0 -0
  167. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/checkout.yaml +0 -0
  168. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/gcp-prod-us-east-1.yaml +0 -0
  169. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/gcp-prod-us-west-1.yaml +0 -0
  170. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/gcp-staging-us-east-1.yaml +0 -0
  171. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/notifications-1.0.0.yaml +0 -0
  172. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/notifications-1.0.1.yaml +0 -0
  173. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/notifications-1.1.0.yaml +0 -0
  174. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/notifications.yaml +0 -0
  175. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/order-service-2.0.1.yaml +0 -0
  176. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/order-service-2.1.0.yaml +0 -0
  177. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/order-service.yaml +0 -0
  178. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/payments-1.6.1.yaml +0 -0
  179. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/payments-1.7.0.yaml +0 -0
  180. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/payments-1.7.1.yaml +0 -0
  181. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/payments.yaml +0 -0
  182. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/release-2026-06-20.yaml +0 -0
  183. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/release-2026-07-01.yaml +0 -0
  184. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/release-2026-07-09.yaml +0 -0
  185. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/release-2026-07-10.yaml +0 -0
  186. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/search-4.0.0.yaml +0 -0
  187. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/search-4.1.0.yaml +0 -0
  188. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/search.yaml +0 -0
  189. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/user-service-1.2.0.yaml +0 -0
  190. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/user-service-1.3.0.yaml +0 -0
  191. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/catalog/user-service.yaml +0 -0
  192. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/entity-relationship-types/environments.json +0 -0
  193. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/entity-relationship-types/versions.json +0 -0
  194. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/entity-types/environment.json +0 -0
  195. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/entity-types/release.json +0 -0
  196. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/entity-types/service-version.json +0 -0
  197. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/workflows/create-environment.yaml +0 -0
  198. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/workflows/create-release.yaml +0 -0
  199. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/environments/workflows/trigger-github-release.yaml +0 -0
  200. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/github-actions-deploy/README.md +0 -0
  201. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/github-actions-deploy/_templates/cortex-async-callback.yml +0 -0
  202. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/github-actions-deploy/_templates/cortex-deploy.yml +0 -0
  203. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/github-actions-deploy/_templates/cortex-register-deploy.yml +0 -0
  204. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/github-actions-deploy/_templates/github-actions-deploy.yaml +0 -0
  205. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/github-actions-deploy/catalog/github-actions-demo.yaml +0 -0
  206. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/github-actions-deploy/scorecards/deploy-health.yaml +0 -0
  207. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/harness-deploy/README.md +0 -0
  208. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/harness-deploy/_templates/cortex-async-callback-template.yaml +0 -0
  209. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/harness-deploy/_templates/cortex-deploy-pipeline.yaml +0 -0
  210. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/harness-deploy/_templates/cortex-record-deploy-template.yaml +0 -0
  211. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/harness-deploy/_templates/trigger-harness-deploy.yaml +0 -0
  212. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/harness-deploy/catalog/harness-demo.yaml +0 -0
  213. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/solutions/harness-deploy/scorecards/deploy-health.yaml +0 -0
  214. {cortexapps_cli-1.33.0 → cortexapps_cli-1.35.0}/cortexapps_cli/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cortexapps-cli
3
- Version: 1.33.0
3
+ Version: 1.35.0
4
4
  Summary: Command Line Interface for cortexapps
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -39,6 +39,7 @@ import cortexapps_cli.commands.packages as packages
39
39
  import cortexapps_cli.commands.plugins as plugins
40
40
  import cortexapps_cli.commands.queries as queries
41
41
  import cortexapps_cli.commands.rest as rest
42
+ import cortexapps_cli.commands.scaffolders as scaffolders
42
43
  import cortexapps_cli.commands.scim as scim
43
44
  import cortexapps_cli.commands.scorecards as scorecards
44
45
  import cortexapps_cli.commands.secrets as secrets
@@ -277,6 +278,7 @@ app.add_typer(packages.app, name="packages")
277
278
  app.add_typer(plugins.app, name="plugins")
278
279
  app.add_typer(queries.app, name="queries")
279
280
  app.add_typer(rest.app, name="rest")
281
+ app.add_typer(scaffolders.app, name="scaffolders")
280
282
  app.add_typer(scim.app, name="scim")
281
283
  app.add_typer(scorecards.app, name="scorecards")
282
284
  app.add_typer(secrets.app, name="secrets")
@@ -0,0 +1,156 @@
1
+ from cortexapps_cli.command_options import CommandOptions
2
+ from cortexapps_cli.command_options import ListCommandOptions
3
+ from cortexapps_cli.utils import print_output_with_context, print_output
4
+ from typing_extensions import Annotated
5
+ import json
6
+ import typer
7
+ import yaml
8
+
9
+ app = typer.Typer(
10
+ help="Scaffolder template commands",
11
+ no_args_is_help=True
12
+ )
13
+
14
+ def _is_valid_yaml(filepath):
15
+ try:
16
+ yaml.safe_load(filepath)
17
+ filepath.seek(0)
18
+ return True
19
+ except yaml.YAMLError:
20
+ return False
21
+
22
+ def _is_valid_json(filepath):
23
+ try:
24
+ json.load(filepath)
25
+ filepath.seek(0)
26
+ return True
27
+ except json.JSONDecodeError:
28
+ return False
29
+
30
+ def _read_definition(file_input):
31
+ if _is_valid_json(file_input):
32
+ content_type = "application/json"
33
+ data = json.loads("".join([line for line in file_input]))
34
+ elif _is_valid_yaml(file_input):
35
+ data = file_input.read()
36
+ content_type = "application/yaml"
37
+ else:
38
+ raise typer.BadParameter("Input file is neither valid JSON nor YAML.")
39
+ return data, content_type
40
+
41
+ @app.command()
42
+ def list(
43
+ ctx: typer.Context,
44
+ _print: CommandOptions._print = True,
45
+ page: ListCommandOptions.page = None,
46
+ page_size: ListCommandOptions.page_size = 250,
47
+ table_output: ListCommandOptions.table_output = False,
48
+ csv_output: ListCommandOptions.csv_output = False,
49
+ columns: ListCommandOptions.columns = [],
50
+ no_headers: ListCommandOptions.no_headers = False,
51
+ filters: ListCommandOptions.filters = [],
52
+ sort: ListCommandOptions.sort = [],
53
+ ):
54
+ """
55
+ List Scaffolder templates.
56
+ """
57
+
58
+ client = ctx.obj["client"]
59
+
60
+ params = {
61
+ "page": page,
62
+ "pageSize": page_size
63
+ }
64
+
65
+ if (table_output or csv_output) and not ctx.params.get('columns'):
66
+ ctx.params['columns'] = [
67
+ "Tag=tag",
68
+ "Name=name",
69
+ "Description=description",
70
+ ]
71
+
72
+ # remove any params that are None
73
+ params = {k: v for k, v in params.items() if v is not None}
74
+
75
+ if page is None:
76
+ # if page is not specified, we want to fetch all pages
77
+ r = client.fetch("api/v1/scaffolders", params=params)
78
+ else:
79
+ # if page is specified, we want to fetch only that page
80
+ r = client.get("api/v1/scaffolders", params=params)
81
+
82
+ if _print:
83
+ print_output_with_context(ctx, r)
84
+ else:
85
+ return(r)
86
+
87
+ @app.command()
88
+ def get(
89
+ ctx: typer.Context,
90
+ tag: str = typer.Option(..., "--tag", "-t", help="The tag or unique, auto-generated Cortex ID of the Scaffolder template"),
91
+ yaml: bool = typer.Option(False, "--yaml", "-y", help="When true, returns the YAML representation of the template."),
92
+ _print: CommandOptions._print = True,
93
+ ):
94
+ """
95
+ Retrieve Scaffolder template by tag or Cortex ID.
96
+ """
97
+
98
+ client = ctx.obj["client"]
99
+
100
+ if yaml:
101
+ headers={'Accept': 'application/yaml'}
102
+ else:
103
+ headers={'Accept': 'application/json'}
104
+ r = client.get("api/v1/scaffolders/" + tag, headers=headers)
105
+
106
+ if _print:
107
+ if yaml:
108
+ print(r)
109
+ else:
110
+ print_output_with_context(ctx, r)
111
+ else:
112
+ return(r)
113
+
114
+ @app.command()
115
+ def create(
116
+ ctx: typer.Context,
117
+ file_input: Annotated[typer.FileText, typer.Option(..., "--file", "-f", help="File containing the Scaffolder template definition; can be passed as stdin with -, example: -f-")],
118
+ ):
119
+ """
120
+ Create or update a Scaffolder template. API key must have the Configure Scaffolder permission. Note: If a Scaffolder template with the same tag already exists, it will be updated.
121
+ """
122
+
123
+ client = ctx.obj["client"]
124
+
125
+ data, content_type = _read_definition(file_input)
126
+ r = client.post("api/v1/scaffolders", data=data, content_type=content_type)
127
+ print_output(r)
128
+
129
+ @app.command()
130
+ def update(
131
+ ctx: typer.Context,
132
+ tag: Annotated[str, typer.Option(..., "--tag", "-t", help="The tag or unique, auto-generated Cortex ID of the Scaffolder template")],
133
+ file_input: Annotated[typer.FileText, typer.Option(..., "--file", "-f", help="File containing the Scaffolder template definition; can be passed as stdin with -, example: -f-")],
134
+ ):
135
+ """
136
+ Update a Scaffolder template by tag or Cortex ID. API key must have the Configure Scaffolder permission.
137
+ """
138
+
139
+ client = ctx.obj["client"]
140
+
141
+ data, content_type = _read_definition(file_input)
142
+ r = client.put("api/v1/scaffolders/" + tag, data=data, content_type=content_type)
143
+ print_output(r)
144
+
145
+ @app.command()
146
+ def delete(
147
+ ctx: typer.Context,
148
+ tag: str = typer.Option(..., "--tag", "-t", help="The tag or unique, auto-generated Cortex ID of the Scaffolder template"),
149
+ ):
150
+ """
151
+ Delete Scaffolder template by tag or Cortex ID. API key must have the Configure Scaffolder permission.
152
+ """
153
+
154
+ client = ctx.obj["client"]
155
+
156
+ r = client.delete("api/v1/scaffolders/" + tag)
@@ -223,8 +223,8 @@ def _get_setup_description(solution_tag: str, solutions_dir: str | None = None)
223
223
  """Return the SETUP_DESCRIPTION from a solution's setup.py, or a generic fallback."""
224
224
  module = _load_setup_module(solution_tag, solutions_dir)
225
225
  if module:
226
- return getattr(module, "SETUP_DESCRIPTION", "This solution includes a post-install setup script.")
227
- return "This solution includes a post-install setup script."
226
+ return getattr(module, "SETUP_DESCRIPTION", "This solution includes a setup script.")
227
+ return "This solution includes a setup script."
228
228
 
229
229
 
230
230
  def _run_post_install_script(solution_tag: str, solutions_dir: str | None = None, ctx=None, no_prompt: bool = False) -> None:
@@ -700,7 +700,7 @@ def install(
700
700
  if failed_m:
701
701
  typer.echo(failed_m.group(0))
702
702
  typer.echo(f"\n {total_imported} imported, {total_failed} failed")
703
- else:
703
+ elif total_imported > 0:
704
704
  typer.echo(f" {total_imported} entities imported")
705
705
  else:
706
706
  typer.echo(output)
@@ -139,6 +139,11 @@ class SolutionSetup(ABC):
139
139
  self._state[key] = True
140
140
  self._save_file()
141
141
 
142
+ def mark_undone(self, key: str) -> None:
143
+ """Clear a step's completion state (e.g., after the underlying resource is deleted)."""
144
+ self._state.pop(key, None)
145
+ self._save_file()
146
+
142
147
  @abstractmethod
143
148
  def collect_prompts(self) -> None:
144
149
  """Collect all user inputs upfront before executing steps."""
@@ -5,7 +5,7 @@ Run via: cortex solutions post-install -s github-actions-deploy
5
5
  """
6
6
 
7
7
  SETUP_DESCRIPTION = (
8
- "This solution includes a post-install setup script that will create a GitHub "
8
+ "This solution includes a setup script that will create a GitHub "
9
9
  "repository, seed it with a GitHub workflow that will add a deploy to a Cortex entity, and configure the required secrets."
10
10
  )
11
11
  import base64
@@ -172,8 +172,6 @@ class GitHubActionsSetup(SolutionSetup):
172
172
 
173
173
  if self._session_base_url:
174
174
  self._answers["cortex_base_url"] = self._session_base_url
175
- else:
176
- self.prompt("cortex_base_url", "Cortex base URL", default=self._session_base_url)
177
175
  else:
178
176
  self.prompt(
179
177
  "cortex_base_url",
@@ -6,7 +6,7 @@ Run via: cortex solutions post-install -s harness-deploy
6
6
  """
7
7
 
8
8
  SETUP_DESCRIPTION = (
9
- "This solution includes a post-install setup script that will configure your Harness "
9
+ "This solution includes a setup script that will configure your Harness "
10
10
  "integration in Cortex, create the deploy pipeline and cortex_api_key secret in Harness, "
11
11
  "import the Cortex trigger workflow, and optionally fire a test deploy."
12
12
  )
@@ -0,0 +1,137 @@
1
+ ---
2
+ name: Workday Integration
3
+ description: Configure the Cortex Workday integration with a sample org hierarchy from the fictional company Pied Piper (from the TV show Silicon Valley) to sync employees and teams into your service catalog.
4
+ ---
5
+
6
+ # Workday Integration
7
+
8
+ Get the Cortex Workday integration running in minutes using a sample org hierarchy from the fictional company Pied Piper (from the TV show *Silicon Valley*). After install, trigger a sync to see employees and teams appear in your catalog — including the full team hierarchy.
9
+
10
+ ## Data Model
11
+
12
+ ```
13
+ ┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
14
+ │ Workday Report │────▶│ Cortex Integration │────▶│ Team Catalog │
15
+ │ (JSON / RaaS) │ │ (field mapping) │ │ + Members │
16
+ └──────────────────────┘ └──────────────────────┘ └──────────────────────┘
17
+
18
+ Sample: Pied Piper supervisory org (Silicon Valley)
19
+
20
+ PP: Pied Piper (Erlich Bachman)
21
+ ├── PP: Engineering (Richard Hendricks)
22
+ │ ├── PP: Platform (Bertram Gilfoyle)
23
+ │ │ └── PP: Infrastructure (Nelson Bighetti)
24
+ │ └── PP: Frontend (Dinesh Chugtai)
25
+ └── PP: Operations (Jared Dunn)
26
+ └── PP: People Ops (Monica Hall)
27
+
28
+ Report Format
29
+ ─────────────
30
+ Each entry represents one employee. Workteam_Group lists the employee's teams.
31
+ Hierarchy is encoded as parentTeamId → teamName. Root teams use "NONE".
32
+ Managers have Team_Managed set to their team's teamName.
33
+
34
+ {
35
+ "Report_Entry": [
36
+ {
37
+ "Email": "erlich.bachman@piedpiper.com",
38
+ "Employee_ID": "PP-100000",
39
+ "First_Name": "Erlich",
40
+ "Last_Name": "Bachman",
41
+ "Managers_Email": "erlich.bachman@piedpiper.com",
42
+ "employeeRole": "CEO",
43
+ "Workteam_Group": [
44
+ {
45
+ "teamName": "PP: Pied Piper",
46
+ "teamDisplayName": "PP: Pied Piper",
47
+ "parentTeamId": "NONE",
48
+ "Team_Managed": "PP: Pied Piper"
49
+ }
50
+ ]
51
+ },
52
+ ...
53
+ ]
54
+ }
55
+
56
+ Field Mapping (data/configuration.json)
57
+ ────────────────────────────────────────
58
+ Maps report columns to employee fields, team identity, and hierarchy.
59
+ Workday reports can be customized — the configuration defines the field
60
+ attributes and the hierarchy, so it works with any supervisory org report.
61
+
62
+ {
63
+ "ownershipReportUrl": "<your-report-url>",
64
+ "reportMappingV2": {
65
+ "email": { "columnName": "Email" },
66
+ "employeeId": { "columnName": "Employee_ID" },
67
+ "firstName": { "columnName": "First_Name" },
68
+ "lastName": { "columnName": "Last_Name" },
69
+ "employeeRole": { "columnName": "employeeRole" },
70
+ "teamListFields": {
71
+ "teamListKey": { "columnName": "Workteam_Group" },
72
+ "teamId": { "columnName": "teamName" },
73
+ "teamName": { "columnName": "teamDisplayName" },
74
+ "hierarchy": {
75
+ "fieldOnParentNode": { "columnName": "teamName" },
76
+ "fieldOnChildNode": { "columnName": "parentTeamId" }
77
+ },
78
+ "teamEmployeeManages": { "columnName": "Team_Managed" }
79
+ },
80
+ "type": "ONE_EMPLOYEE_MULTIPLE_TEAMS"
81
+ }
82
+ }
83
+ ```
84
+
85
+ ## After Installing
86
+
87
+ Trigger the sync in Cortex to import the Pied Piper org hierarchy:
88
+
89
+ **Catalog → All Entities → Import Entities → Workday → Sync Entities → Next Step**
90
+
91
+ You should see 7 teams appear in your catalog with the full hierarchy:
92
+
93
+ ```
94
+ PP: Pied Piper (Erlich Bachman)
95
+ ├── PP: Engineering (Richard Hendricks)
96
+ │ ├── PP: Platform (Bertram Gilfoyle)
97
+ │ │ └── PP: Infrastructure (Nelson Bighetti)
98
+ │ └── PP: Frontend (Dinesh Chugtai)
99
+ └── PP: Operations (Jared Dunn)
100
+ └── PP: People Ops (Monica Hall)
101
+ ```
102
+
103
+ Workday reports can be customized to match your org structure. The configuration defines which report columns map to employee fields, team identity, and the parent-child hierarchy — so the integration works with any supervisory org report that follows the same shape.
104
+
105
+ ## What's Included
106
+
107
+ - **Pied Piper org data:** 7 employees across 4 levels of hierarchy (Erlich → Richard → Gilfoyle/Dinesh, Jared → Monica, Gilfoyle → Big Head)
108
+ - **Integration config:** field mapping and report URL pre-configured, pointing at the hosted data
109
+ - **Setup script:** one-command configuration of the Cortex Workday integration via API
110
+
111
+ ## Quick Start
112
+
113
+ 1. Install the solution:
114
+
115
+ ```
116
+ cortex solutions install -s workday
117
+ ```
118
+
119
+ 2. Follow the post-install setup prompts, or run later:
120
+
121
+ ```
122
+ cortex solutions post-install -s workday
123
+ ```
124
+
125
+ 3. Trigger the import in Cortex:
126
+
127
+ **Catalog → All Entities → Import Entities → Workday → Sync Entities → Next Step**
128
+
129
+ 4. Check your team hierarchy to see the Pied Piper org chart.
130
+
131
+ ## How It Works
132
+
133
+ The setup script calls the Cortex Workday integration API to configure a report URL pointing at the bundled Pied Piper supervisory org data. Cortex fetches the report and syncs employees and teams into your catalog on the next import run.
134
+
135
+ ## Adapting to Real Workday Data
136
+
137
+ To connect your own Workday report, go to **Settings → Integrations → Workday** in the Cortex UI and update the Report URL, username, and password. The field mapping in `data/configuration.json` works unchanged for any Workday supervisory org report that uses the same column names.
@@ -0,0 +1,31 @@
1
+ {
2
+ "username": "ISU_Cortex",
3
+ "ownershipReportUrl": "https://jeff-test-org.github.io/workday-mocks/pied-piper-supervisory-org",
4
+ "reportMappingV2": {
5
+ "email": { "columnName": "Email" },
6
+ "employeeId": { "columnName": "Employee_ID" },
7
+ "firstName": { "columnName": "First_Name" },
8
+ "lastName": { "columnName": "Last_Name" },
9
+ "managerEmail": null,
10
+ "employeeRole": { "columnName": "employeeRole" },
11
+ "rootTeams": [],
12
+ "teamListFields": {
13
+ "teamListKey": { "columnName": "Workteam_Group" },
14
+ "teamId": { "columnName": "teamName" },
15
+ "teamName": { "columnName": "teamDisplayName" },
16
+ "hierarchy": {
17
+ "fieldOnChildNode": { "columnName": "parentTeamId" },
18
+ "fieldOnParentNode": { "columnName": "teamName", "isList": false }
19
+ },
20
+ "teamEmployeeManages": { "columnName": "Team_Managed" }
21
+ },
22
+ "fallbackFields": {
23
+ "teamId": null,
24
+ "teamName": null,
25
+ "fieldOnParentNode": null,
26
+ "fieldOnChildNode": null
27
+ },
28
+ "type": "ONE_EMPLOYEE_MULTIPLE_TEAMS"
29
+ },
30
+ "password": "asdf"
31
+ }
@@ -0,0 +1,113 @@
1
+ {
2
+ "Report_Entry": [
3
+ {
4
+ "Email": "erlich.bachman@piedpiper.com",
5
+ "Employee_ID": "PP-100000",
6
+ "First_Name": "Erlich",
7
+ "Last_Name": "Bachman",
8
+ "Managers_Email": "erlich.bachman@piedpiper.com",
9
+ "employeeRole": "CEO",
10
+ "Workteam_Group": [
11
+ {
12
+ "teamName": "PP: Pied Piper",
13
+ "teamDisplayName": "PP: Pied Piper",
14
+ "parentTeamId": "NONE",
15
+ "Team_Managed": "PP: Pied Piper"
16
+ }
17
+ ]
18
+ },
19
+ {
20
+ "Email": "richard.hendricks@piedpiper.com",
21
+ "Employee_ID": "PP-100001",
22
+ "First_Name": "Richard",
23
+ "Last_Name": "Hendricks",
24
+ "Managers_Email": "erlich.bachman@piedpiper.com",
25
+ "employeeRole": "CTO",
26
+ "Workteam_Group": [
27
+ {
28
+ "teamName": "PP: Engineering",
29
+ "teamDisplayName": "PP: Engineering",
30
+ "parentTeamId": "PP: Pied Piper",
31
+ "Team_Managed": "PP: Engineering"
32
+ }
33
+ ]
34
+ },
35
+ {
36
+ "Email": "bertram.gilfoyle@piedpiper.com",
37
+ "Employee_ID": "PP-100002",
38
+ "First_Name": "Bertram",
39
+ "Last_Name": "Gilfoyle",
40
+ "Managers_Email": "richard.hendricks@piedpiper.com",
41
+ "employeeRole": "Staff Engineer",
42
+ "Workteam_Group": [
43
+ {
44
+ "teamName": "PP: Platform",
45
+ "teamDisplayName": "PP: Platform",
46
+ "parentTeamId": "PP: Engineering",
47
+ "Team_Managed": "PP: Platform"
48
+ }
49
+ ]
50
+ },
51
+ {
52
+ "Email": "dinesh.chugtai@piedpiper.com",
53
+ "Employee_ID": "PP-100003",
54
+ "First_Name": "Dinesh",
55
+ "Last_Name": "Chugtai",
56
+ "Managers_Email": "richard.hendricks@piedpiper.com",
57
+ "employeeRole": "Senior Engineer",
58
+ "Workteam_Group": [
59
+ {
60
+ "teamName": "PP: Frontend",
61
+ "teamDisplayName": "PP: Frontend",
62
+ "parentTeamId": "PP: Engineering"
63
+ }
64
+ ]
65
+ },
66
+ {
67
+ "Email": "jared.dunn@piedpiper.com",
68
+ "Employee_ID": "PP-100004",
69
+ "First_Name": "Jared",
70
+ "Last_Name": "Dunn",
71
+ "Managers_Email": "erlich.bachman@piedpiper.com",
72
+ "employeeRole": "COO",
73
+ "Workteam_Group": [
74
+ {
75
+ "teamName": "PP: Operations",
76
+ "teamDisplayName": "PP: Operations",
77
+ "parentTeamId": "PP: Pied Piper",
78
+ "Team_Managed": "PP: Operations"
79
+ }
80
+ ]
81
+ },
82
+ {
83
+ "Email": "monica.hall@piedpiper.com",
84
+ "Employee_ID": "PP-100005",
85
+ "First_Name": "Monica",
86
+ "Last_Name": "Hall",
87
+ "Managers_Email": "jared.dunn@piedpiper.com",
88
+ "employeeRole": "VP People",
89
+ "Workteam_Group": [
90
+ {
91
+ "teamName": "PP: People Ops",
92
+ "teamDisplayName": "PP: People Ops",
93
+ "parentTeamId": "PP: Operations"
94
+ }
95
+ ]
96
+ },
97
+ {
98
+ "Email": "nelson.bighetti@piedpiper.com",
99
+ "Employee_ID": "PP-100006",
100
+ "First_Name": "Nelson",
101
+ "Last_Name": "Bighetti",
102
+ "Managers_Email": "bertram.gilfoyle@piedpiper.com",
103
+ "employeeRole": "Engineer",
104
+ "Workteam_Group": [
105
+ {
106
+ "teamName": "PP: Infrastructure",
107
+ "teamDisplayName": "PP: Infrastructure",
108
+ "parentTeamId": "PP: Platform"
109
+ }
110
+ ]
111
+ }
112
+ ]
113
+ }
@@ -0,0 +1,145 @@
1
+ """
2
+ Post-install setup script for the workday solution.
3
+ Configures the Cortex Workday integration to sync the Pied Piper org hierarchy.
4
+ Run via: cortex solutions post-install -s workday
5
+ """
6
+
7
+ SETUP_DESCRIPTION = (
8
+ "This solution includes a setup script that will configure "
9
+ "the Cortex Workday integration to sync the Pied Piper org hierarchy."
10
+ )
11
+
12
+ import json
13
+ import sys
14
+ from pathlib import Path
15
+ import requests
16
+
17
+ try:
18
+ from cortexapps_cli.solutions._lib.setup_base import SolutionSetup
19
+ except ImportError:
20
+ sys.path.insert(0, str(Path(__file__).parent.parent.parent))
21
+ from _lib.setup_base import SolutionSetup
22
+
23
+ DATA_DIR = Path(__file__).parent / "data"
24
+ CONFIG_FILE = DATA_DIR / "configuration.json"
25
+
26
+
27
+ class WorkdayIntegrationSetup(SolutionSetup):
28
+ solution_tag = "workday"
29
+
30
+ def __init__(
31
+ self,
32
+ cortex_api_key: str = None,
33
+ cortex_base_url: str = None,
34
+ no_prompt: bool = False,
35
+ **kwargs,
36
+ ):
37
+ super().__init__(no_prompt=no_prompt, **kwargs)
38
+ self._api_key = cortex_api_key or ""
39
+ self._base_url = (cortex_base_url or "https://api.getcortexapp.com").rstrip("/")
40
+
41
+ def _cortex_headers(self) -> dict:
42
+ return {
43
+ "Authorization": f"Bearer {self._api_key}",
44
+ "Content-Type": "application/json",
45
+ }
46
+
47
+ def collect_prompts(self) -> None:
48
+ pass # credentials come from CLI session
49
+
50
+ def _check_and_replace_existing(self) -> None:
51
+ """Check for an existing Workday config; backup and delete it if user confirms."""
52
+ r = requests.get(
53
+ f"{self._base_url}/api/v1/workday/default-configuration",
54
+ headers=self._cortex_headers(),
55
+ )
56
+ if r.status_code == 404:
57
+ self.mark_undone("configure") # no integration on server — reconfigure regardless of cached state
58
+ return
59
+ r.raise_for_status()
60
+
61
+ if not self.confirm("Existing Workday integration found. Replace it?", default=False):
62
+ print("Keeping existing Workday integration. Exiting.")
63
+ raise SystemExit(0)
64
+
65
+ # Back up the existing config
66
+ backup_dir = Path.home() / ".cortex" / "solutions" / "workday"
67
+ backup_dir.mkdir(parents=True, exist_ok=True)
68
+ backup_file = backup_dir / "backup-config.json"
69
+ backup_file.write_text(json.dumps(r.json(), indent=2))
70
+ print(f" Backed up existing config to {backup_file}")
71
+
72
+ # Delete the existing config
73
+ del_r = requests.delete(
74
+ f"{self._base_url}/api/v1/workday/configurations",
75
+ headers=self._cortex_headers(),
76
+ )
77
+ del_r.raise_for_status()
78
+ self.mark_undone("configure")
79
+
80
+ def _configure_integration(self) -> None:
81
+ """POST the bundled Workday integration configuration."""
82
+ if self.already_done("configure"):
83
+ return "Already configured (skipped)"
84
+ config = json.loads(CONFIG_FILE.read_text())
85
+ print(f" (cortex integrations workday add -f {CONFIG_FILE})")
86
+ r = requests.post(
87
+ f"{self._base_url}/api/v1/workday/configuration",
88
+ headers=self._cortex_headers(),
89
+ json=config,
90
+ )
91
+ if not r.ok:
92
+ raise RuntimeError(
93
+ f"Failed to configure Workday integration: {r.status_code} {r.text}"
94
+ )
95
+ self.mark_done("configure")
96
+
97
+ def _validate_integration(self) -> None:
98
+ """Validate the Workday integration configuration."""
99
+ print(f" (cortex integrations workday validate)")
100
+ r = requests.post(
101
+ f"{self._base_url}/api/v1/workday/configuration/validate",
102
+ headers=self._cortex_headers(),
103
+ )
104
+ r.raise_for_status()
105
+ configs = r.json().get("configurations", [])
106
+ if not configs:
107
+ raise RuntimeError("Validation returned no results — is the integration configured?")
108
+ result = configs[0]
109
+ if not result.get("isValid", False):
110
+ raise RuntimeError(f"Validation failed: {result.get('message', 'unknown error')}")
111
+ print(f" ✓ Configuration validated successfully")
112
+
113
+ def _enable_auto_import(self) -> None:
114
+ """Prompt user to enable Auto Import Workday Teams in Cortex settings."""
115
+ print(" In Cortex: Settings → Entities → Teams → Enable 'Auto import Workday teams'")
116
+ if not self.confirm(" Is 'Auto import Workday teams' enabled?", default=False):
117
+ print("Please enable it before continuing.")
118
+ raise SystemExit(0)
119
+
120
+ def steps(self) -> list:
121
+ return [
122
+ ("Enable Auto Import Workday teams", self._enable_auto_import),
123
+ ("Check for existing Workday integration", self._check_and_replace_existing),
124
+ ("Configure Workday integration", self._configure_integration),
125
+ ("Validate Workday integration", self._validate_integration),
126
+ ]
127
+
128
+ def post_steps(self) -> None:
129
+ print("\n✓ Workday integration configured with the Pied Piper org hierarchy.\n")
130
+ print("Next: trigger a sync in Cortex:")
131
+ print(" Catalog → All Entities → Import Entities → Workday")
132
+ print(" Click 'Sync Entities', then 'Next Step' to import.\n")
133
+ print("Then check your team hierarchy to see the Pied Piper org chart.")
134
+
135
+
136
+ def main(cortex_api_key=None, cortex_base_url=None, no_prompt=False, **kwargs):
137
+ WorkdayIntegrationSetup(
138
+ cortex_api_key=cortex_api_key,
139
+ cortex_base_url=cortex_base_url,
140
+ no_prompt=no_prompt,
141
+ ).run()
142
+
143
+
144
+ if __name__ == "__main__":
145
+ main()
@@ -1,7 +1,7 @@
1
1
  [tool.poetry]
2
2
  name = "cortexapps-cli"
3
3
  # version will be incremented via command line as part of github actions build
4
- version = "1.33.0"
4
+ version = "1.35.0"
5
5
  description = "Command Line Interface for cortexapps"
6
6
  license = "MIT"
7
7
  authors = [