This is an action to be ran in a pull request to make sure that all commits have a AB#123 in the commit message.
It also automatically links pull request to all of the Azure DevOps work item(s).
Screenshot of validating the logs and creating pull requests:
This should only be triggered via pull requests.
name: pr-commit-message-enforcer-and-linker on: pull_request: branches: [ "main" ] jobs: pr-commit-message-enforcer-and-linker: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Azure DevOps Commit Validator and Pull Request Linker uses: joshjohanning/azdo_commit_message_validator@v1 with: azure-devops-organization: myorg # The name of the Azure DevOps organization azure-devops-token: ${{ secrets.AZURE_DEVOPS_PAT }} # "Azure DevOps Personal Access Token (needs to be a full PAT) fail-if-missing-workitem-commit-link: true # Fail the action if a commit in the pull request is missing AB# in the commit message link-commits-to-pull-request: true # Link the work items found in commits to the pull request- Create a repository secret titled
AZURE_DEVOPS_PAT- it needs to be a full PAT - Pass the Azure DevOps organization to the
azure-devops-organizationinput parameter
Note: jq needs to be installed on the runner running this action
The action loops through each commit and:
- makes sure it has
AB#123in the commit message - if yes, add a GitHub Pull Request link to the work item in Azure DevOps
Adding the link to the GitHub Pull Request was the tricky part.
If you use an API to look at the links of a work item with a GitHub pull request link, you will see:
"attributes": { "authorizedDate": "2022-08-02T18:45:03.567Z", "id": 3916078, "name": "GitHub Pull Request", "resourceCreatedDate": "2022-08-02T18:45:03.567Z", "resourceModifiedDate": "2022-08-02T18:45:03.567Z", "revisedDate": "9999-01-01T00:00:00Z" }, "rel": "Artifact Link", "url": "vstfs:///GitHub/PullRequest/62f33e8a-c421-441d-88e1-06c46c4ffbbb%2f7"Note the url field - vstfs:///GitHub/PullRequest/62f33e8a-c421-441d-88e1-06c46c4ffbbb%2f7
Creating a new link is (relatively) easy with the API, but you can't just use the regular GitHub pull request link. They use a garbled GUID that isn't the GUID or ID of the repo in GitHub.
The GUID can be found using an (undocumented) API:
POST https://dev.azure.com/%DEVOPS_ORG%/_apis/Contribution/dataProviders/query?api-version=7.1-preview.1 See this thread for slightly more info.


