Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
12ce68d954 | ||
|
|
29eacfdc4d | ||
|
|
748d4201cc |
@@ -1,3 +1,10 @@
|
|||||||
|
## v1.20.0 - 2026-09-13
|
||||||
|
|
||||||
|
- **feature**: add gitlab remote support [[jonathan.nerat](mailto:jonathan.nerat@gmail.com)] (748d420)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
## v1.19.0 - 2026-07-31
|
## v1.19.0 - 2026-07-31
|
||||||
|
|
||||||
- **style**: format with ruff [[jteran](mailto:jteran@renatre.org.ar)] (11a48a9)
|
- **style**: format with ruff [[jteran](mailto:jteran@renatre.org.ar)] (11a48a9)
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ El comando solicitará 2 opciones:
|
|||||||
- [x] Bitbucket
|
- [x] Bitbucket
|
||||||
- [x] Github
|
- [x] Github
|
||||||
- [x] Gitea
|
- [x] Gitea
|
||||||
|
- [x] Gitlab
|
||||||
|
|
||||||
La configuración del remoto requiere tener un Access Token para poder crear los PRs automáticamente.
|
La configuración del remoto requiere tener un Access Token para poder crear los PRs automáticamente.
|
||||||
El mismo se puede crear desde el repositorio al que se quiere dar acceso: *"Repository settings" >
|
El mismo se puede crear desde el repositorio al que se quiere dar acceso: *"Repository settings" >
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ from git_flow.remote.base import RemoteAPI
|
|||||||
from git_flow.remote.bitbucket import BitbucketRemoteAPI
|
from git_flow.remote.bitbucket import BitbucketRemoteAPI
|
||||||
from git_flow.remote.github import GithubRemoteAPI
|
from git_flow.remote.github import GithubRemoteAPI
|
||||||
from git_flow.remote.gitea import GiteaRemoteAPI
|
from git_flow.remote.gitea import GiteaRemoteAPI
|
||||||
|
from git_flow.remote.gitlab import GitlabRemoteAPI
|
||||||
from git_flow.io import *
|
from git_flow.io import *
|
||||||
from os.path import isfile
|
from os.path import isfile
|
||||||
|
|
||||||
@@ -123,6 +124,9 @@ def get_remote_api(token: str) -> RemoteAPI:
|
|||||||
if remote_type == "gitea":
|
if remote_type == "gitea":
|
||||||
remote_schema = "https://" if schema == "ssh://" else schema
|
remote_schema = "https://" if schema == "ssh://" else schema
|
||||||
return GiteaRemoteAPI(remote_schema + host, repository, token)
|
return GiteaRemoteAPI(remote_schema + host, repository, token)
|
||||||
|
elif remote_type == "gitlab":
|
||||||
|
remote_schema = "https://" if schema == "ssh://" else schema
|
||||||
|
return GitlabRemoteAPI(remote_schema + host, repository, token)
|
||||||
elif remote_type == "bitbucket":
|
elif remote_type == "bitbucket":
|
||||||
return BitbucketRemoteAPI(repository, token)
|
return BitbucketRemoteAPI(repository, token)
|
||||||
elif remote_type == "github":
|
elif remote_type == "github":
|
||||||
|
|||||||
@@ -101,7 +101,7 @@ uno nuevo.""",
|
|||||||
remote = base.io_choice("Remoto", remotes)
|
remote = base.io_choice("Remoto", remotes)
|
||||||
|
|
||||||
remote_type = base.io_choice(
|
remote_type = base.io_choice(
|
||||||
"Tipo de remoto:", ["bitbucket", "github", "gitea"]
|
"Tipo de remoto:", ["bitbucket", "github", "gitea", "gitlab"]
|
||||||
)
|
)
|
||||||
|
|
||||||
return (remote, remote_type)
|
return (remote, remote_type)
|
||||||
|
|||||||
@@ -0,0 +1,59 @@
|
|||||||
|
from urllib.parse import quote
|
||||||
|
|
||||||
|
import requests
|
||||||
|
from git_flow import GitFlowError
|
||||||
|
from git_flow.remote.base import RemoteAPI
|
||||||
|
|
||||||
|
|
||||||
|
class GitlabRemoteAPI(RemoteAPI):
|
||||||
|
def __init__(self, base_url: str, repository: str, token: str) -> None:
|
||||||
|
super().__init__(repository, token)
|
||||||
|
self.base_url = base_url
|
||||||
|
|
||||||
|
def create_pull_request(
|
||||||
|
self,
|
||||||
|
source: str,
|
||||||
|
destination: str,
|
||||||
|
title: str | None = None,
|
||||||
|
description: str | None = None,
|
||||||
|
close_source_branch: bool = True
|
||||||
|
) -> str:
|
||||||
|
response = requests.post(
|
||||||
|
self.get_endpoint("/merge_requests"),
|
||||||
|
headers=self.get_headers(),
|
||||||
|
json={
|
||||||
|
"title": title,
|
||||||
|
"description": description,
|
||||||
|
"source_branch": source,
|
||||||
|
"target_branch": destination,
|
||||||
|
"remove_source_branch": close_source_branch,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
if response.ok:
|
||||||
|
return "PR creado exitosamente: " + response.json()["web_url"]
|
||||||
|
else:
|
||||||
|
raise GitFlowError("Ocurrió un error al crear el PR: " + response.text)
|
||||||
|
|
||||||
|
def create_tag(self, tag: str, commit: str) -> str:
|
||||||
|
response = requests.post(
|
||||||
|
self.get_endpoint("/repository/tags"),
|
||||||
|
headers=self.get_headers(),
|
||||||
|
json={"tag_name": tag, "ref": commit},
|
||||||
|
)
|
||||||
|
|
||||||
|
if response.ok:
|
||||||
|
return "Tag creado exitosamente: " + tag
|
||||||
|
else:
|
||||||
|
raise GitFlowError("Ocurrió un error al crear el tag: " + response.text)
|
||||||
|
|
||||||
|
def get_endpoint(self, resource: str) -> str:
|
||||||
|
project_id = quote(self.repository, safe="")
|
||||||
|
return f"{self.base_url}/api/v4/projects/{project_id}{resource}"
|
||||||
|
|
||||||
|
def get_headers(self):
|
||||||
|
return {
|
||||||
|
"Accept": "application/json",
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"PRIVATE-TOKEN": self.token,
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user