Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
* Add support for merge request resource label event endpoints
* Add support for merge request and merge request note award emoji endpoints
* Add support for `MergeRequests::remove`
* Add support for `MergeRequests::addToMergeTrain`
* Add support for container registry endpoints
* Add support for `Environments::stopStale`
* Add support for `last_activity_after` and `last_activity_before` in `Groups::projects`
Expand Down
29 changes: 29 additions & 0 deletions src/Api/MergeRequests.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
use Symfony\Component\OptionsResolver\Exception\InvalidOptionsException;
use Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException;
use Symfony\Component\OptionsResolver\Options;
use Symfony\Component\OptionsResolver\OptionsResolver;

class MergeRequests extends AbstractApi
{
Expand Down Expand Up @@ -318,6 +319,34 @@ public function merge(int|string $project_id, int $mr_iid, array $parameters = [
return $this->put($this->getProjectPath($project_id, 'merge_requests/'.self::encodePath($mr_iid).'/merge'), $parameters);
}

/**
* @param array $parameters {
*
* @var bool $auto_merge add the merge request to the merge train when checks pass
* @var string $sha must match the HEAD of the source branch if present
* @var bool $squash squash commits into a single commit on merge
* @var bool $when_pipeline_succeeds deprecated in GitLab 17.11. Use auto_merge instead.
* }
*/
public function addToMergeTrain(int|string $project_id, int $mr_iid, array $parameters = []): mixed
{
$resolver = new OptionsResolver();
$resolver->setDefined('auto_merge')
->setAllowedTypes('auto_merge', 'bool')
;
$resolver->setDefined('sha')
->setAllowedTypes('sha', 'string')
;
$resolver->setDefined('squash')
->setAllowedTypes('squash', 'bool')
;
$resolver->setDefined('when_pipeline_succeeds')
->setAllowedTypes('when_pipeline_succeeds', 'bool')
;

return $this->post($this->getProjectPath($project_id, 'merge_trains/merge_requests/'.self::encodePath($mr_iid)), $resolver->resolve($parameters));
}

public function showNotes(int|string $project_id, int $mr_iid): mixed
{
return $this->get($this->getProjectPath($project_id, 'merge_requests/'.self::encodePath($mr_iid).'/notes'));
Expand Down
25 changes: 25 additions & 0 deletions tests/Api/MergeRequestsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,31 @@ public function shouldMergeMergeRequest(): void
$this->assertEquals($expectedArray, $api->merge(1, 2, ['merge_commit_message' => 'Accepted']));
}

#[Test]
public function shouldAddMergeRequestToMergeTrain(): void
{
$expectedArray = [['id' => 267, 'target_branch' => 'main', 'status' => 'idle']];

$api = $this->getApiMock();
$api->expects($this->once())
->method('post')
->with('projects/1/merge_trains/merge_requests/2', [
'auto_merge' => true,
'sha' => 'abc123',
'squash' => true,
'when_pipeline_succeeds' => false,
])
->willReturn($expectedArray)
;

$this->assertEquals($expectedArray, $api->addToMergeTrain(1, 2, [
'auto_merge' => true,
'sha' => 'abc123',
'squash' => true,
'when_pipeline_succeeds' => false,
]));
}

#[Test]
public function shouldGetNotes(): void
{
Expand Down