docs: add Azure DevOps Enterprise integration#594
Conversation
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
|
✅ Review complete. This review was performed through OpenHands Cloud Automation. You can log in and view the conversation here. |
all-hands-bot
left a comment
There was a problem hiding this comment.
🟡 Acceptable — Well-structured first-class enterprise integration guide. Two documentation gaps in the Standalone Helm path need to be fixed before this merges, as they could silently break installations.
[IMPROVEMENT OPPORTUNITIES]
- [enterprise/integrations/azure-devops.mdx, Line 116] Missing format note for
organizationfield: The Replicated tab has a<Note>block (lines 100–104) explaining the organization field must be the name only (e.g.,contoso, nothttps://dev.azure.com/contoso). The Standalone Helm tab has the sameorganization:field but no equivalent note. Users who enter the full URL here will get silent failures. - [enterprise/integrations/azure-devops.mdx, Lines 129–131] Helm secret wiring is unexplained: The text says the
openhandschart reads credentials "from the Kubernetes secret named inazureDevOps.auth.existingSecret" but never explains that theopenhands-secretschart creates that secret. A reader following the Standalone Helm path sees two separatevalues.yamlblocks and a hardcodedexistingSecret: azure-devops-appwith no explanation of how the two charts connect. This is the first integration doc to cover Standalone Helm (Bitbucket Data Center is Replicated-only), so there is no prior art in this repo to fall back on — the relationship must be stated explicitly.
[RISK ASSESSMENT]
- [Overall PR]
⚠️ Risk Assessment: 🟢 LOW
Documentation-only change. No code paths, no API surface, no behavioral change to the running product. The nav JSON addition is alphabetically correct and the JSON remains valid. The two issues above affect enterprise operators following the Standalone Helm path; they don't break anything for existing users.
VERDICT:
❌ Needs rework: The Standalone Helm tab is missing the organization-format note and the secret-wiring explanation — both of which could cause a failed deployment for an operator following the docs step by step.
KEY INSIGHT:
The Standalone Helm section describes two interdependent charts but doesn't state that the openhands-secrets chart creates the Kubernetes secret that the openhands chart references by name.
This review was generated by an AI agent (OpenHands) on behalf of the user through OpenHands Automation. View conversation
Improve this review? If any feedback above seems incorrect or irrelevant to this repository, you can teach the reviewer to do better:
- Add a
.agents/skills/custom-codereview-guide.mdfile to your branch (or edit it if one already exists) with the/codereviewtrigger and the context the reviewer is missing. See the customization docs for the required frontmatter format.- Re-request a review — the reviewer reads guidelines from the PR branch, so your changes take effect immediately.
- When your PR is merged, the guideline file goes through normal code review by repository maintainers.
Resolve with AI? Install the iterate skill in your agent and run
/iterateto automatically drive this PR through CI, review, and QA until it's merge-ready.Was this review helpful? React with 👍 or 👎 to give feedback.
| azureDevOps: | ||
| enabled: true | ||
| tenantId: "<your-microsoft-entra-tenant-id>" | ||
| organization: "<your-azure-devops-organization>" |
There was a problem hiding this comment.
🟠 Important: The Replicated tab has a <Note> block (lines 100–104) explicitly stating the organization field must be the name only (contoso, not https://dev.azure.com/contoso). This tab has the same organization: field with no equivalent clarification. Operators who paste the full URL here will get a silent misconfiguration — the field looks valid but repositories won't be found.
Add a note mirroring the one in the Replicated tab:
<Note>
The organization value is the organization name only, for example
`contoso` for `https://dev.azure.com/contoso`. Do not include
`https://dev.azure.com/`.
</Note>|
|
||
| Then redeploy the charts. The `openhands` deployment reads the client ID and | ||
| client secret from the Kubernetes secret named in | ||
| `azureDevOps.auth.existingSecret`. |
There was a problem hiding this comment.
🟠 Important: The current text says the openhands chart reads credentials "from the Kubernetes secret named in azureDevOps.auth.existingSecret" but doesn't explain where that secret comes from. Readers see two separate values.yaml blocks and a hardcoded existingSecret: azure-devops-app with no explicit statement that deploying the openhands-secrets chart is what creates that secret.
This is the first integration doc in this repo to cover Standalone Helm, so there's no prior art to fall back on. Please state the relationship explicitly, for example:
Deploying the
openhands-secretschart with these values creates the Kubernetes secret namedazure-devops-app. Theopenhandschart reads the client ID and client secret from that secret viaazureDevOps.auth.existingSecret.
If the secret name is customizable, also note that both charts must use the same name.
Summary
Validation
python3 -c 'import json; json.load(open("docs.json"))'uv run --with pytest --with pyyaml pytest -q tests/test_sync_code_blocks.py tests/test_sync_use_case_automations.pyNotes
make llms-checkcurrently produces unrelated generated drift inllms.txt/llms-full.txt; I left those generated files untouched to keep this PR scoped.