Compare commits

..
4 Commits
5 changed files with 24 additions and 18 deletions
+11 -1
View File
@@ -22,12 +22,22 @@ jobs:
id: version id: version
run: | run: |
pip install git-flow-envs=="${{ vars.GITFLOWENVS_VERSION }}" pip install git-flow-envs=="${{ vars.GITFLOWENVS_VERSION }}"
git-flow tag --token="${{ secrets.GITEA_TOKEN }}" # El código 3 indica que no hace falta un nuevo tag: se saltea la publicación
status=0
git-flow tag --token="${{ secrets.GITEA_TOKEN }}" || status=$?
if [ "$status" -eq 3 ]; then
echo "skip=true" >> "$GITHUB_OUTPUT"
elif [ "$status" -ne 0 ]; then
exit "$status"
fi
- name: Install uv - name: Install uv
if: steps.version.outputs.skip != 'true'
uses: astral-sh/setup-uv@v8.3.2 uses: astral-sh/setup-uv@v8.3.2
- name: Build and publish - name: Build and publish
if: steps.version.outputs.skip != 'true'
run: | run: |
uv build uv build
uv publish --token="${{ secrets.PYPI_TOKEN }}" uv publish --token="${{ secrets.PYPI_TOKEN }}"
-14
View File
@@ -1,14 +0,0 @@
image: python:3.10
pipelines:
branches:
'main':
- step:
name: "Tag and publish package"
caches:
- pip
script:
- pip install uv
- uv run git-flow tag --token=$BEARER
- uv build
- uv publish --token=$PYPI_TOKEN
+3 -1
View File
@@ -79,7 +79,9 @@ def check_merge_conflicts(target: str):
print="Realizando merge de prueba para verificar conflictos" print="Realizando merge de prueba para verificar conflictos"
) )
Git("merge", abort=True).exec(print="Abortando merge de prueba", check=False) # Si el merge no llegó a realizarse (por ejemplo, "Already up to date") no hay nada que abortar
if Git.is_merging():
Git("merge", abort=True).exec(print="Abortando merge de prueba")
if merge_conflicts: if merge_conflicts:
base.io_error( base.io_error(
+5 -2
View File
@@ -14,6 +14,9 @@ from git_flow.git import Git
app = typer.Typer() app = typer.Typer()
# Código de salida cuando no hace falta crear un tag, para que el CI pueda saltear la publicación
EXIT_NO_TAG_NEEDED = 3
@app.command() @app.command()
def tag(target: str | None = None, token: str | None = None, update_changelog: bool = False): def tag(target: str | None = None, token: str | None = None, update_changelog: bool = False):
@@ -35,7 +38,7 @@ def tag(target: str | None = None, token: str | None = None, update_changelog: b
merge_commit_tag = Git("tag", "--points-at", merge_commit).firstline() merge_commit_tag = Git("tag", "--points-at", merge_commit).firstline()
if merge_commit_tag: if merge_commit_tag:
base.io_info(f"El último merge ya tiene un tag: {merge_commit_tag}") base.io_info(f"El último merge ya tiene un tag: {merge_commit_tag}")
return raise typer.Exit(code=EXIT_NO_TAG_NEEDED)
token, ci = get_token_and_ci(token) token, ci = get_token_and_ci(token)
@@ -97,7 +100,7 @@ def tag(target: str | None = None, token: str | None = None, update_changelog: b
"Los cambios realizados no implican un salto de versión, se mantiene la anterior." "Los cambios realizados no implican un salto de versión, se mantiene la anterior."
) )
raise typer.Exit(code=1) raise typer.Exit(code=EXIT_NO_TAG_NEEDED)
if update_changelog: if update_changelog:
changelog = Changelog() changelog = Changelog()
+5
View File
@@ -63,6 +63,11 @@ class Git:
def get_branches(prefix: str = ""): def get_branches(prefix: str = ""):
return Git._get_references("heads/" + prefix) return Git._get_references("heads/" + prefix)
@staticmethod
def is_merging() -> bool:
"""Indica si hay un merge en curso (existe MERGE_HEAD), con o sin conflictos."""
return Git("rev-parse", "MERGE_HEAD", quiet=True, verify=True).code() == 0
@staticmethod @staticmethod
def status(): def status():
return list(map(Git.Status, Git("status", porcelain=True).lines(False))) return list(map(Git.Status, Git("status", porcelain=True).lines(False)))