Skip to content

Conversation

apricote
Copy link
Owner

@apricote apricote commented Jun 14, 2025

If the release PR description was changed by a human after releaser-pleaser fetched the PR for the first time, releaser-pleaser would revert the users changes accidentally.

This commit introduces an additional check right before updating the pull request description, to make sure we do not accidentally lose user changes. There is still the potential for a conflict in between us checking the description is the same, and updating the description. The time window for this should be reduced from multiple seconds-minutes to a few hundred milliseconds at most.

In case a conflict is detected, we retry the whole process up to 2 times, to make sure that the users changes are reflected as soon as possible. This is especially important on GitLab CI/CD because a changed pull (merge) request description does not cause another job to run.

With this change, the branch is still pushed, as the user is not expected to make any changes to it.

Fixes #151

If the release PR description was changed by a human after
releaser-pleaser fetched the PR for the first time, releaser-pleaser
would revert the users changes accidentally.

This commit introduces an additional check right before updating the
pull request description, to make sure we do not accidentally loose user
changes. There is still the potential for a conflict in between us
checking the description is the same, and updating the description. The
time window for this should be reduced from multiple seconds-minutes to
a few hundred milliseconds at most.

In case a conflict is detected, we retry the whole process up to 2
times, to make sure that the users changes are reflected as soon as
possible. This is especially important on GitLab CI/CD because a changed
pull (merge) request description does not cause another job to run.

With this change, the branch is still pushed, as the user is not
expected to make any changes to it.

Fixes #151
@apricote apricote self-assigned this Jun 14, 2025
@apricote apricote added the enhancement New feature or request label Jun 14, 2025
@apricote apricote enabled auto-merge (squash) June 14, 2025 13:22
@codecov-commenter
Copy link

Codecov Report

Attention: Patch coverage is 0% with 36 lines in your changes missing coverage. Please review.

Project coverage is 24.75%. Comparing base (08d35f2) to head (f02529b).

Files with missing lines Patch % Lines
releaserpleaser.go 0.00% 36 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main     #197      +/-   ##
==========================================
- Coverage   25.24%   24.75%   -0.50%     
==========================================
  Files          22       22              
  Lines        1767     1802      +35     
==========================================
  Hits          446      446              
- Misses       1293     1328      +35     
  Partials       28       28              

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@apricote apricote merged commit d24ae7d into main Jun 14, 2025
5 checks passed
@apricote apricote deleted the pr-description-conflict branch June 14, 2025 13:23
apricote added a commit that referenced this pull request Jun 14, 2025
Describe the issue with concurrency, the global state and what went into
the recent changes in #196, #197 and #198.
apricote added a commit that referenced this pull request Jun 14, 2025
Describe the issue with concurrency, the global state and what went into
the recent changes in #196, #197 and #198.
apricote added a commit that referenced this pull request Jun 14, 2025
Describe the issue with concurrency, the global state and what went into
the recent changes in #196, #197 and #198.
apricote pushed a commit to hetznercloud/fleeting-plugin-hetzner that referenced this pull request Jun 16, 2025
…etznercloud/fleeting-plugin-hetzner!252)

This MR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [apricote/releaser-pleaser](https://gitlab.com/apricote/releaser-pleaser) | repository | minor | `v0.5.1` -> `v0.6.0` |

---

### Release Notes

<details>
<summary>apricote/releaser-pleaser (apricote/releaser-pleaser)</summary>

### [`v0.6.0`](https://gitlab.com/apricote/releaser-pleaser/blob/HEAD/CHANGELOG.md#v060)

[Compare Source](https://gitlab.com/apricote/releaser-pleaser/compare/v0.5.1...v0.6.0)

##### ✨ Highlights

##### Reduced resource usage

`releaser-pleaser` now uses less resources:

- It now skips pushing changes to the release pull request if they are only a rebase.
- The configurations for GitHub Actions and GitLab CI/CD now makes sure that only a single job is running at the same time. On GitHub unnecessary/duplicate jobs are also automatically aborted.
- It handles the stop signals from the CI environment and tries to exit quickly.

\`\`\`yaml
concurrency:
group: releaser-pleaser
cancel-in-progress: true
\`\`\`

##### Avoid losing manual edits to release pull request

Before, releaser-pleaser was prone to overwriting user changes to the release pull request if they were made after releaser-pleaser already started running. There is now an additional check right before submitting the changes to see if the description changed, and retry if it did.

##### Proper commit authorship

Before, the release commits were created by `releaser-pleaser &lt;&gt;`. This was ugly to look at. We now check for details on the API user used to talk to the forge, and use that users details instead as the commit author. The committer is still `releaser-pleaser`.

##### Features

- real user as commit author ([#&#8203;187](apricote/releaser-pleaser#187))
- avoid pushing release branch only for rebasing ([#&#8203;114](apricote/releaser-pleaser#114))
- colorize log output ([#&#8203;195](apricote/releaser-pleaser#195))
- graceful shutdown when CI job is cancelled ([#&#8203;196](apricote/releaser-pleaser#196))
- detect changed pull request description and retry process ([#&#8203;197](apricote/releaser-pleaser#197))
- run one job concurrently to reduce chance of conflicts ([#&#8203;198](apricote/releaser-pleaser#198))

##### Bug Fixes

- crash when running in repo without any tags ([#&#8203;190](apricote/releaser-pleaser#190))

</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 is behind base branch, 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:eyJjcmVhdGVkSW5WZXIiOiI0MC41Ny4xIiwidXBkYXRlZEluVmVyIjoiNDAuNTcuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging this pull request may close these issues.

fix: race-condition between human & CI job updating a release PR description
2 participants