Problem:
I want to update and commit a version file after a Pull Request complete in Azure Devops. For example, I have a repository with a “main” branch and a “changes” branch. When I create a pull request to merge “changes” into “main”, I want to increment the version in version.h.
I am using Azure Devops pipelines, I have a azure-pipeline.yaml file that is triggered when a pull request is created. The yaml executes and it increments version.h, however, I always fail the step to push the version.h file. I do not know how to add it to the current merge request.
I have all the permissions required as defined here.
Tried:
- Triggering on push to main branch, but I don’t know how to differentiate between the pipeline version.h push to main or the PR updates pushed to main after the PR completes.
- Triggering on pull request, updating the pull request to include change to version.h, but git complains because azure devops has create a merge request and cannot reconcile the change
EDIT:
Apologies, it’s a little difficult to describe what I am trying to do. The error I ran into was related to trying to push to a repository that was not synced to the remote repository. The repository used by the azure build agent only checks out the merge commit, so pushing to “main” or “changes” ended up out of date. I resolved this by deleting the /s directory after every job.
3
It is quite confusing to understand your actual requirements, based on your current description, because when a PR validation build runs, the PR is not yet completed and we cannot push the updated ·version.h· file as a commit onto the temporary intermediate branch refs/pull/$(System.PullRequest.PullRequestId)/merge
, which can only be generated and changed by the Azure DevOps System and which is actually checked out by the PR validation build.
When a PR completes, it generates a PR merge commit on the PR target branch (main
). As well recognized as an IndividualCI
, it can also trigger a pipeline. You may try the sample YAML pipeline below to be triggered by any commit pushed onto main
branch, then to update a version.h
file and push the commit onto the main
branch. Still not sure why not update the version.h
file in your PR source branch and bring it into PR target branch together with the PR merge commit.
trigger:
branches:
include:
- main
paths:
exclude:
- version.h
pool:
vmImage: ubuntu-latest
steps:
- checkout: self
persistCredentials: true
fetchDepth: 0
- script: |
git config --global user.email "$(Build.RequestedForEmail)"
git config --global user.name "Azure Pipelines"
git checkout -b main
echo test$(Build.BuildId) >> version.h
git add version.h
git commit -m "Updated version.h during build $(Build.BuildId)"
git push origin main
2