Giter Site home page Giter Site logo

gh-cli-lauramanzini's Introduction

Práctica 3: gh-cli

Laura Manzini

[email protected]

  1. Introducción
  2. gh alias
  3. alias gh create-repo
  4. alias gh delete-repo
  5. Seleccionar las organizaciones a las que se apartenece
  6. gh org-list
  7. gh extension

1. Introducción

El comando gh es el comando de GitHub que se emplega en la terminal.

2. gh alias

El comando gh alias se utiliza para semplificar y crear shortcuts para todos los comandos de gh que se utilizan más frecuentemente. La documentación explica como utilizar el comando.

Es importante explicitar todos los arguments y también los flags del comando de lo que se quiere hacer el alias.

El comando base que se utiliza para hacer un alias es el siguiente:

gh alias <comando> [flags]

Los comandos que son disponibles para el utilizo de alias son los siguientes:

  • set: para crear un nuevo alias
  • delete: para eliminar un alias ya existente
  • list: para enumerar los alias

3. alias gh create-repo

En primero lugar para crear un repositorio sobre gitpod es necesario autenticarse ejecutendo el código:

gh auth login

Será necesario generar un token sobre el perfil de GitHub y luego pegarlo sobre el terminal.

Un vez que nos encontramos en nuestro workspace es posible crear un repositorio ejecutando el código:

gh repo create org/repo

Si quieremos por ejemplo crear un repositorio sobre la organizacion ULL-ESIT-DMSI-1920 ejecutamos el siguiente código:

gh repo create ULL-ESIT-DMSI-1920/prueba-lauramanzini

Create repo

Para visualizar una lista de los repositorios que estan entre la organización se ejecuta gh repo list ULL-ESIT-DMSI-1920.

Repo list

Para crear un comando alias que sea capaz de crear un repositorio sobre una organización que ya existe ejecutamo el comando gh alias set como sigue:

gh alias set repo-create 'repo create ULL-ESIT-DMSI-1920/$1'
gh repo-create prueba1

4. alias gh delete-repo

Para eliminar un repositorio se utiliza el comando gh api para tener una lista de los flags que son disponibles para el comando.

api help

El flag -X nos dice que va a ser posible utilizar uno de los metodos (get,delete ...) para cambiar los repositorios.

Se puede consultar la documentación para eliminar un repositorio se encuentra en las referencias de los repositorios API.

Desde la documentación podemos ver como a través del comando curl es posible eliminar el repositorio.

Imaginamos de tener un repositorio llamado prueba-lauramanzini en la organización ULL-ESIT-DMSI-1920. La documentación indica que utilizando el siguiente código será posible eliminar el dicho repositorio:

curl \
  -X DELETE \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/ULL-ESIT-DMSI-1920/prueba-lauramanzini

El comando curl no va a funcionar por que no se encuentra la documentación necesaria para hacer el cambio. De otra manera se utiliza el comando gh api:

gh api \
  -X DELETE \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/ULL-ESIT-DMSI-1920/prueba-lauramanzini

delete repo

Para crear un comando alias que pueda eliminar un repositorio seleccionado en una organización utilizamos el comando gh alias set.

gh alias set repo-delete 'api -X DELETE "/repos/org/$1"'

Nota: Cuando ejecutamos el comando repo-delete será necesario explicitar la organización y también el nombre del repositorio que quieremos eliminar.

5. Seleccionar las organizaciones a las que se apartenece

Para ver todas las organizaciones a las que pertenezco se consulta la documentación de GitHub y se encuentra el comando gh api /user/memberships/orgs que nos permite de obtener una lista de todas las afiliaciones a organizaciones.

Añadendo el comando | jq al final se puede acceder al fichero .json con toda la información sobre las organizaciones a las que el mi perfil de GitHub está asociado.

El fichero json que obtenimos es un fichero muy largo y a veces bastante difícil de entender. Para solucionar este problema se utiliza el comando --paginate. Ejecutamos:

gh api --paginate /user/memberships/orgs | jq.

gh api paginate

Para obtener las informacciones que están contenida en el fichero json que hemos obtenido es necesario instalar el jq json queries. Esta herramienta nos permite de acceder a la información contenida en qualquier fichero json.

Los comandos más utilizados se pueden consultar al siguiente enlace.

Después de instalar la herramienta se ejecuta el código brew install jq sobre GitPod:

jq install

El fichero json es un array de elementos y para acceder a esos se siguen las siguientes reglas:

  • Se utilizan las comillas simples ' ' para indicar los elementos del fichero json que queremos ver
  • En los corchetes ponemos la posicción del elemento del array que queremos seleccionar
  • Despues de los corchetes ponemos un punto . cada vez que queremos acceder a uno de los elementos del elemento del array seleccionado el los corchetes.

Por ejemplo ejecutando el código gh api /user/memberships/orgs | jq '.[0]' obtenimos la información relativa el primero elemento del array, es decir el elemento que es en la posicción 0 del array.

Una otra manera de obtener las misma informaciones pero en formato diferente es ejecutando el código: gh api /user/memberships/orgs --jq '.[0]'

Para acceder a las organizaciones a las que apartenezco es necesario acceder en primero al campo organizations y luego al campo login de lo mismo. Se ejecuta:

gh api /user/memberships/orgs jq '.[].organization.login'.

Organizations list

6. orgs-list

El objectivo ahora es crear un comando alias que nos permite de acceder a las organizaciones. El comando que se ejecuta para obtener esta información es:

gh api /user/memberships/orgs | jq '.[].organization | .login, .url'

organization login y url

Una vez que hemos encontrado el comando para obtener la información solicitada podemos creare el comando orgs-list ejecutando el código:

gh alias set orgs-list "api /user/memberships/orgs | jq '.[].organization | .login, .url'"

orgs-list alias

7. gh extension

Una gh extension es una extensión de un comando de GitHub CLI que una vez instalada o creada se puede utilizar.

El comando gh extension tiene 5 comandos:

  • create: para crear una nueva gh extension
  • install: para instalar una gh extension desde un repositorio que ya existe
  • list: muestra la lista de todos los gh extension que se han instalado
  • remove: quita una gh extension ya instalada
  • upgrade: hace un upgrade de una gh extension ya instalada

Para major información se consulte la documentación de GitHub.

La extension que creo es gh-repo-rename-lauramanzini.

Se utiliza el metodo gh extension create para crear una extension del comando que será llamado gh-repo-rename-lauramanzini ejecutando el código:

gh extension create gh-repo-rename-lauramanzini
cd gh-repo-rename-lauramanzini
gh repo create --public ULL-ESIT-DMSI-1920/gh-repo-rename-lauramanzini

Ahora tenemos un repositorio creado en la organización ULL-ESIT-DMSI-1920 que es llamado gh-repo-rename-lauramanzini.

Se puede también hacer un commit sobre este repositorio de la siguiente manera:

git commit -am 'Primer prueba de laura'
git push --set-upstream origin master

Una vez que hemos creado el repositorio en la organización es necesario crear un submodulo entre el repositorio que tenemos con el comando git submodule add <URL>.

Ejecutamos entoncés en la carpeta gh-cli-lauramanzini el siguiente código:

git submodule add https://github.com/ULL-ESIT-DMSI-1920/gh-repo-rename-lauramanzini.git

Ahora a través del comando ls -la es posible comprobar la presencia del fichero .gitsubmodules. Es todavía necesario hacer un commit de los cambio que se han aportado al repositorio. Ejecutamos:

git commit -m Commit16
git push

Open in Visual Studio Code

gh-cli-lauramanzini's People

Contributors

lauramanzini avatar crguezl avatar github-classroom[bot] avatar

Watchers

 avatar

gh-cli-lauramanzini's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.