Pending tasks in issues #14
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Pending tasks in issues | |
| on: | |
| workflow_dispatch: | |
| jobs: | |
| pending-tasks: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout del repositorio | |
| uses: actions/checkout@v2 | |
| - name: Configurar Python | |
| uses: actions/setup-python@v2 | |
| with: | |
| python-version: 3.x # Especifica la versión de Python que necesites | |
| - name: Instalar dependencias | |
| run: | | |
| python -m pip install --upgrade pip | |
| pip install PyGithub | |
| - name: Ejecutar script de búsqueda y actualizar issue | |
| env: | |
| TOKEN: ${{ secrets.NOVUM_PRIVATE_REPOS }} | |
| run: | | |
| python - <<EOF | |
| import os | |
| from github import Github | |
| from datetime import datetime | |
| TOKEN = os.environ['TOKEN'] | |
| # Nombre de usuario y nombre del repositorio | |
| OWNER = 'Telefonica' | |
| REPO = 'mistica-design' | |
| TARGET_ISSUE_NUMBER = 2490 | |
| # URL base del repositorio | |
| REPO_URL = f'https://github.com/{OWNER}/{REPO}' | |
| # Crea una instancia de la clase Github usando tu token de acceso | |
| g = Github(TOKEN) | |
| # Obtiene el repositorio | |
| repo = g.get_repo(f'{OWNER}/{REPO}') | |
| # Busca las issues cerradas en el repositorio | |
| closed_issues = repo.get_issues(state='closed') | |
| # Lista para almacenar las issues con checkboxes desactivados | |
| issues_con_checkboxes_desactivados = [] | |
| def count_checkboxes(text): | |
| """Cuenta checkboxes marcados y desmarcados en un texto""" | |
| if text is None: | |
| return 0, 0 | |
| checked = text.count('- [x]') + text.count('- [X]') | |
| unchecked = text.count('- [ ]') | |
| return checked, unchecked | |
| # Itera sobre las issues cerradas | |
| for issue in closed_issues: | |
| has_unchecked = False | |
| # Verifica que el cuerpo de la issue no sea None | |
| if issue.body is not None and '- [ ]' in issue.body: | |
| has_unchecked = True | |
| # Si no se encontraron en el body, busca en los comentarios | |
| if not has_unchecked: | |
| comments = issue.get_comments() | |
| for comment in comments: | |
| if '- [ ]' in comment.body: | |
| has_unchecked = True | |
| break | |
| if has_unchecked: | |
| issues_con_checkboxes_desactivados.append(issue) | |
| # Imprime el listado de issues con checkboxes desactivados | |
| print("Issues con checkboxes desactivados:") | |
| for issue in issues_con_checkboxes_desactivados: | |
| issue_url = f'{REPO_URL}/issues/{issue.number}' | |
| print(f"Issue #{issue.number}: {issue.title} ({issue_url})") | |
| # Crear tabla en formato markdown | |
| table_header = "| Issue | Name | Progress | Last Modification |\n" | |
| table_separator = "|-------|------|----------|------------------|\n" | |
| table_rows = "" | |
| for issue in issues_con_checkboxes_desactivados: | |
| issue_link = f"[#{issue.number}]({REPO_URL}/issues/{issue.number})" | |
| issue_name = issue.title.replace("|", "\\|") # Escapar pipes en el título | |
| last_modified = issue.updated_at.strftime("%Y-%m-%d %H:%M") | |
| # Contar checkboxes en el body de la issue | |
| checked_body, unchecked_body = count_checkboxes(issue.body) | |
| # Contar checkboxes en los comentarios | |
| checked_comments = 0 | |
| unchecked_comments = 0 | |
| comments = issue.get_comments() | |
| for comment in comments: | |
| c_checked, c_unchecked = count_checkboxes(comment.body) | |
| checked_comments += c_checked | |
| unchecked_comments += c_unchecked | |
| # Total de checkboxes | |
| total_checked = checked_body + checked_comments | |
| total_unchecked = unchecked_body + unchecked_comments | |
| total_checkboxes = total_checked + total_unchecked | |
| progress = f"{total_checked} / {total_checkboxes}" | |
| table_rows += f"| {issue_link} | {issue_name} | {progress} | {last_modified} |\n" | |
| # Crear el nuevo body de la issue | |
| current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S UTC") | |
| new_body = f"""# Pending Tasks Report | |
| **Last Updated:** {current_time} | |
| **Total Issues Found:** {len(issues_con_checkboxes_desactivados)} | |
| ## Issues with Unchecked Checkboxes | |
| {table_header}{table_separator}{table_rows} | |
| --- | |
| *This report shows closed issues that still contain unchecked checkboxes (- [ ]) in their description or comments.* | |
| *Progress column shows: completed tasks / total tasks* | |
| """ | |
| # Actualizar la issue #2490 | |
| try: | |
| target_issue = repo.get_issue(TARGET_ISSUE_NUMBER) | |
| target_issue.edit(body=new_body) | |
| print(f"\n✅ Issue #{TARGET_ISSUE_NUMBER} updated successfully!") | |
| print(f"Total issues with unchecked checkboxes: {len(issues_con_checkboxes_desactivados)}") | |
| except Exception as e: | |
| print(f"\n❌ Error updating issue #{TARGET_ISSUE_NUMBER}: {str(e)}") | |
| EOF |