Feature detect v1 projects on interactive pr create#10915
Feature detect v1 projects on interactive pr create#10915williammartin merged 2 commits intotrunkfrom
pr create#10915Conversation
pr create
As far as I can see, when there is project metadata, the preview option will never be shown in the interactive multiselect, so I don't believe this change has any functional difference. However, I did use the opportunity to drive out tests for generateCompareURL
c237606 to
1a5b7ca
Compare
andyfeller
left a comment
There was a problem hiding this comment.
Looks good to me! ✨ Nothing blocking
| index, err := IndexFor(options, answer) | ||
| if err != nil { | ||
| return nil, err | ||
| } |
There was a problem hiding this comment.
thought: this will return an error if any answer is not an available option. IndexFor returns -1 for the int index of the answer, which is necessary being a literal with anything 0 or more being a valid index while this has []int.
makes sense
| httpmock.StringResponse(` | ||
| { "data": { "repository": { "projects": { | ||
| "nodes": [ | ||
| { "name": "ProjectV1Title", "id": "PROJECTV1ID", "resourcePath": "/OWNER/REPO/projects/1" } |
There was a problem hiding this comment.
praise: thanks for the distinct v1 project info vs v2 project
| ProjectTitles: []string{"ProjectTitle"}, | ||
| }, | ||
| projectsV1Support: gh.ProjectsV1Unsupported, | ||
| want: "https://github.com/OWNER/REPO/compare/main...feature?body=&expand=1&projects=OWNER%2FREPO%2F3", |
There was a problem hiding this comment.
nit: I wish there was a different way to craft this type of string as the URL encoding requires a bit of care from the review's part map the 3 in %2F3 as the resourcePath above
There was a problem hiding this comment.
Would it help if I provided the unescaped URL and passed it into a function that did the escaping?
There was a problem hiding this comment.
honestly, I struggled with a good suggestion that didn't feel over engineered, so I don't know if there is a simple solution but wish there was. 🤷
| // Register a handler to check for projects V2 just to avoid the registry panicking, even | ||
| // though we return a 500 error. This is because the project lookup is done in parallel | ||
| // so the previous error doesn't early exit. | ||
| reg.Register( | ||
| httpmock.GraphQL(`projectsV2`), | ||
| // Simulate a GraphQL error to early exit the test. | ||
| httpmock.StatusStringResponse(500, ""), | ||
| ) |
There was a problem hiding this comment.
praise: thank you for the comment explaining this 🙇
| if p == "Title (required)" { | ||
| return "Test Title", nil | ||
| } else { | ||
| return "", prompter.NoSuchPromptErr(p) | ||
| } |
There was a problem hiding this comment.
nit: I know it isn't functionally any different but 🤏 slimmer
| if p == "Title (required)" { | |
| return "Test Title", nil | |
| } else { | |
| return "", prompter.NoSuchPromptErr(p) | |
| } | |
| if p == "Title (required)" { | |
| return "Test Title", nil | |
| } | |
| return "", prompter.NoSuchPromptErr(p) |
There was a problem hiding this comment.
Thanks. Think I just copy and pasted this from somewhere.
| if p == "Body" { | ||
| return "Test Body", nil | ||
| } else { | ||
| return "", prompter.NoSuchPromptErr(p) | ||
| } |
There was a problem hiding this comment.
| if p == "Body" { | |
| return "Test Body", nil | |
| } else { | |
| return "", prompter.NoSuchPromptErr(p) | |
| } | |
| if p == "Body" { | |
| return "Test Body", nil | |
| } | |
| return "", prompter.NoSuchPromptErr(p) |
| // Ignore the error because we have no way to really stub it without | ||
| // fully stubbing a GQL error structure in the request body. | ||
| _ = createRun(&opts) |
There was a problem hiding this comment.
question: what's your opinion on when to combine lines like this with the initialization on line 2323 versus separate?
genuine curiosity as they're functionally the same, just unsure if intentional.
cli/pkg/cmd/pr/create/create_test.go
Lines 2164 to 2196 in 1a5b7ca
There was a problem hiding this comment.
Just copy and pasted from different locations. Happy to combine into one form if you prefer one or the other.
There was a problem hiding this comment.
Thanks for confirming; I don't really care but making sure to ask curious question in case there was something.
| if p == "Title (required)" { | ||
| return "Test Title", nil | ||
| } else { | ||
| return "", prompter.NoSuchPromptErr(p) | ||
| } |
There was a problem hiding this comment.
| if p == "Title (required)" { | |
| return "Test Title", nil | |
| } else { | |
| return "", prompter.NoSuchPromptErr(p) | |
| } | |
| if p == "Title (required)" { | |
| return "Test Title", nil | |
| } | |
| return "", prompter.NoSuchPromptErr(p) |
| if p == "Body" { | ||
| return "Test Body", nil | ||
| } else { | ||
| return "", prompter.NoSuchPromptErr(p) | ||
| } |
There was a problem hiding this comment.
| if p == "Body" { | |
| return "Test Body", nil | |
| } else { | |
| return "", prompter.NoSuchPromptErr(p) | |
| } | |
| if p == "Body" { | |
| return "Test Body", nil | |
| } | |
| return "", prompter.NoSuchPromptErr(p) |
| }) | ||
|
|
||
| // Verify that our request contained projectCards | ||
| // Verify that our request did not contain projectCards |
There was a problem hiding this comment.
praise: thank you for catching and fixing this
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [cli/cli](https://github.com/cli/cli) | minor | `v2.72.0` -> `v2.73.0` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>cli/cli (cli/cli)</summary> ### [`v2.73.0`](https://github.com/cli/cli/releases/tag/v2.73.0): GitHub CLI 2.73.0 [Compare Source](cli/cli@v2.72.0...v2.73.0) ####Copilot Coding Agent Support You can now assign issues to GitHub Copilot directly from `gh`, just as you would assign them to a teammate. Use `gh issue edit <number> --add-assignee @​copilot` to assign the GitHub Copilot coding agent, and Copilot will work in the background to understand the issue, propose a solution, and open a pull request when it's ready for your review. If you run `gh issue edit` interactively, `Copilot (AI)` will be displayed as a potential assignee. This feature is available for GitHub Copilot Pro+ and Copilot Enterprise subscribers. For more details, refer to [the full changelog post for Copilot coding agent](https://github.blog/changelog/2025-05-19-github-copilot-coding-agent-in-public-preview/). #### What's Changed ##### ✨ Features - Copilot is assignable to issues and pull requests with `issue edit` and `pr edit` by [@​BagToad](https://github.com/BagToad) in cli/cli#10992 - `gh issue edit`: actors are assignable to issues by [@​BagToad](https://github.com/BagToad) in cli/cli#10960 - `gh pr edit`: Assign actors to pull requests by [@​BagToad](https://github.com/BagToad) in cli/cli#10984 - `issue edit`, `pr edit`: handle display names in interactive assignee editing by [@​BagToad](https://github.com/BagToad) in cli/cli#10990 - `issue edit`, `pr edit`: Support special non-interactive (flags) assignee name `@copilot` by [@​BagToad](https://github.com/BagToad) in cli/cli#10991 - \[gh issue/pr comment] Add support for last comment delete for issues and MRs by [@​sinansonmez](https://github.com/sinansonmez) in cli/cli#10596 - \[gh issue view] Expose `closedByPullRequestsReferences` JSON field by [@​iamazeem](https://github.com/iamazeem) in cli/cli#10941 - Accessible prompter always displays selection defaults in a format readable by a screen reader by [@​BagToad](https://github.com/BagToad) in cli/cli#10937 ##### 🐛 Fixes - Fix `StatusJSONResponse` usage by [@​babakks](https://github.com/babakks) in cli/cli#10810 - Fix panic on `gh pr view 0` by [@​nopcoder](https://github.com/nopcoder) in cli/cli#10729 - Fix flakey test for accessible prompter by [@​BagToad](https://github.com/BagToad) in cli/cli#10918 - Fix accessible prompter flaky tests by [@​babakks](https://github.com/babakks) in cli/cli#10977 - Handle missing archive URLs on release download by [@​williammartin](https://github.com/williammartin) in cli/cli#10947 - Fix bug when removing all MR reviewers by [@​babakks](https://github.com/babakks) in cli/cli#10975 ##### 📚 Docs & Chores - Feature detect v1 projects on pr view by [@​williammartin](https://github.com/williammartin) in cli/cli#10821 - Feature detect v1 projects on non-interactive pr create by [@​williammartin](https://github.com/williammartin) in cli/cli#10909 - Feature detect v1 projects on web mode pr create by [@​williammartin](https://github.com/williammartin) in cli/cli#10911 - Feature detect v1 projects on interactive `pr create` by [@​williammartin](https://github.com/williammartin) in cli/cli#10915 - Feature detect v1 projects on pr edit by [@​williammartin](https://github.com/williammartin) in cli/cli#10942 - Move predicate type filtering in `gh attestation verify` by [@​malancas](https://github.com/malancas) in cli/cli#10670 - Improve assertion for disabled echo mode by [@​babakks](https://github.com/babakks) in cli/cli#10927 #####
Dependencies - chore(deps): bump actions/attest-build-provenance from 2.2.2 to 2.3.0 by [@​dependabot](https://github.com/dependabot) in cli/cli#10886 - chore(deps): bump github.com/cpuguy83/go-md2man/v2 from 2.0.6 to 2.0.7 by [@​dependabot](https://github.com/dependabot) in cli/cli#10869 #### What's Changed #### New Contributors - [@​sinansonmez](https://github.com/sinansonmez) made their first contribution in cli/cli#10596 - [@​nopcoder](https://github.com/nopcoder) made their first contribution in cli/cli#10729 **Full Changelog**: cli/cli@v2.72.0...v2.73.0 </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC4xNS4wIiwidXBkYXRlZEluVmVyIjoiNDAuMTUuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
Description
Relates to: #10714
Builds on: #10911
This PR tackles projectv1 deprecation on pr creation for the interactive mode.
Reviewer Notes
DO NOT MERGE into base branch, wait for base branch to be merged into trunk.
You can verify the presence or absence of
projectsby running:And proceeding through the interactive prompts to add a project, and submit a PR with a project added to the metadata.
This exists for queries
RepositoryProjectListandOrganizationProjectList