mirror of
https://github.com/pestphp/pest.git
synced 2026-06-15 07:28:23 +02:00
* fix: update gitlab urls for issues and prs to match new format Added an optional host parameter to the gitlab method, defaulting to 'gitlab.com'. Updated the issues and prs URLs to include '/-/' in the path, which is the new format for GitLab URLs. This change ensures that the URLs generated for GitLab projects are correct and reflect the new structure of GitLab's URLs for issues and merge requests. Host parameter allows users to specify a custom GitLab instance if they are using a self-hosted version of GitLab, while still maintaining the default behavior for users who are using gitlab.com. * fix: update gitlab method to use hostname parameter correctly
113 lines
2.4 KiB
PHP
113 lines
2.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Pest\Configuration;
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
final class Project
|
|
{
|
|
/**
|
|
* The assignees link.
|
|
*
|
|
* @internal
|
|
*/
|
|
public string $assignees = '';
|
|
|
|
/**
|
|
* The issues link.
|
|
*
|
|
* @internal
|
|
*/
|
|
public string $issues = '';
|
|
|
|
/**
|
|
* The PRs link.
|
|
*
|
|
* @internal
|
|
*/
|
|
public string $prs = '';
|
|
|
|
/**
|
|
* The singleton instance.
|
|
*/
|
|
private static ?self $instance = null;
|
|
|
|
/**
|
|
* Creates a new instance of the project.
|
|
*/
|
|
public static function getInstance(): self
|
|
{
|
|
return self::$instance ??= new self;
|
|
}
|
|
|
|
/**
|
|
* Sets the test project to GitHub.
|
|
*/
|
|
public function github(string $project): self
|
|
{
|
|
$this->issues = "https://github.com/{$project}/issues/%s";
|
|
$this->prs = "https://github.com/{$project}/pull/%s";
|
|
|
|
$this->assignees = 'https://github.com/%s';
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Sets the test project to GitLab.
|
|
*/
|
|
public function gitlab(string $project, string $hostname = 'gitlab.com'): self
|
|
{
|
|
// Simple way to ensure only the host is used
|
|
$hostname = parse_url($hostname, PHP_URL_HOST) ?? $hostname;
|
|
|
|
$this->issues = "https://{$hostname}/{$project}/-/work_items/%s";
|
|
$this->prs = "https://{$hostname}/{$project}/-/merge_requests/%s";
|
|
|
|
$this->assignees = "https://{$hostname}/%s";
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Sets the test project to Bitbucket.
|
|
*/
|
|
public function bitbucket(string $project): self
|
|
{
|
|
$this->issues = "https://bitbucket.org/{$project}/issues/%s";
|
|
$this->prs = "https://bitbucket.org/{$project}/pull-requests/%s";
|
|
|
|
$this->assignees = 'https://bitbucket.org/%s';
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Sets the test project to Jira.
|
|
*/
|
|
public function jira(string $namespace, string $project): self
|
|
{
|
|
$this->issues = "https://{$namespace}.atlassian.net/browse/{$project}-%s";
|
|
|
|
$this->assignees = "https://{$namespace}.atlassian.net/secure/ViewProfile.jspa?name=%s";
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Sets the test project to custom.
|
|
*/
|
|
public function custom(string $issues, string $prs, string $assignees): self
|
|
{
|
|
$this->issues = $issues;
|
|
$this->prs = $prs;
|
|
|
|
$this->assignees = $assignees;
|
|
|
|
return $this;
|
|
}
|
|
}
|