Cómo automatizar el archivo README de su perfil de GitHub

La nueva función README de la página de perfil de GitHub está aportando algo de personalidad a las páginas de Myspace del desarrollador de Internet.

Aunque Markdown se presta mejor al contenido de texto estático estándar, eso no impide que las personas creativas trabajen para crear un README de siguiente nivel. Puede incluir GIF e imágenes para agregar algo de movimiento y dinamismo (están cubiertos en GitHub Flavor Markdown), pero estoy pensando en algo un poco más dinámico.

Dado que está al frente y al centro de su perfil de GitHub, su README es una gran oportunidad para que la gente sepa de qué se trata, lo que considera importante y para mostrar algunos aspectos destacados de su trabajo.

Es posible que desee mostrar sus últimos repositorios, tweets o publicaciones de blog. Mantenerlo actualizado tampoco tiene por qué ser una molestia, gracias a las herramientas de entrega continua como GitHub Actions.

Mi archivo README actual se actualiza a diario con un enlace a mi última publicación de blog. Así es como construí una actualización automática README.mdcon acciones de Go y GitHub.

Leer y escribir archivos con Go

He estado escribiendo mucho en Python últimamente, pero para algunas cosas realmente me gusta usar Go. Se podría decir que es mi idioma preferido para funcproyectos. Lo siento. No pude detenerme.

Para crear mi README.md, obtendré contenido estático de un archivo existente, lo combinaré con un contenido dinámico nuevo que generaremos con Go, luego hornearé todo a 400 grados hasta que salga algo increíble .

Así es como leemos en un archivo llamado static.mdy lo ponemos en stringforma:

// Unwrap Markdown content content, err := ioutil.ReadFile("static.md") if err != nil { log.Fatalf("cannot read file: %v", err) return err } // Make it a string stringyContent := string(content) 

¡Las posibilidades para su contenido dinámico solo están limitadas por su imaginación! Aquí, usaré el github.com/mmcdole/gofeedpaquete para leer la fuente RSS de mi blog y obtener la publicación más reciente.

fp := gofeed.NewParser() feed, err := fp.ParseURL("//victoria.dev/index.xml") if err != nil { log.Fatalf("error getting feed: %v", err) } // Get the freshest item rssItem := feed.Items[0] 

Para unir estos bits y producir bondad fibrosa, usamos fmt.Sprintf()para crear una cadena formateada.

// Whisk together static and dynamic content until stiff peaks form blog := "Read my latest blog post: **[" + rssItem.Title + "](" + rssItem.Link + ")**" data := fmt.Sprintf("%s\n%s\n", stringyContent, blog) 

Luego, para crear un nuevo archivo a partir de esta mezcla, usamos os.Create(). Hay más cosas que debe saber sobre el aplazamiento file.Close(), pero no necesitamos entrar en esos detalles aquí. Agregaremos file.Sync()para asegurarnos de que se escriba nuestro README.

// Prepare file with a light coating of os file, err := os.Create("README.md") if err != nil { return err } defer file.Close() // Bake at n bytes per second until golden brown _, err = io.WriteString(file, data) if err != nil { return err } return file.Sync() 

Vea el código completo aquí en mi repositorio README.

Mmmm, ¿eso no huele bien? ? Hagamos que esto suceda a diario con una acción de GitHub.

Ejecutar su programa Go en un horario con Actions

Puede crear un flujo de trabajo de acción de GitHub que se active tanto en un envío a su mastersucursal como en un horario diario. Aquí hay una porción de lo .github/workflows/update.yamlque define esto:

on: push: branches: - master schedule: - cron: '0 11 * * *' 

Para ejecutar el programa Go que reconstruye nuestro README, primero necesitamos una copia de nuestros archivos. Usamos actions/checkoutpara eso:

steps: - name: ?️ Get working copy uses: actions/[email protected] with: fetch-depth: 1 

Este paso ejecuta nuestro programa Go:

- name: ? Shake & bake README run: | cd ${GITHUB_WORKSPACE}/update/ go run main.go 

Finalmente, enviamos los archivos actualizados a nuestro repositorio. Obtenga más información sobre las variables que se muestran en Uso de variables y secretos en un flujo de trabajo.

- name: ? Deploy run: | git config user.name "${GITHUB_ACTOR}" git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" git add . git commit -am "Update dynamic content" git push --all -f //${{ secrets.GITHUB_TOKEN }}@github.com/${GITHUB_REPOSITORY}.git 

Vea el código completo para este flujo de trabajo de Acción aquí en mi repositorio README.

Continúe y actualice automáticamente su archivo README

¡Felicitaciones y bienvenido al club infantil genial! Ahora sabe cómo crear un archivo README de perfil de GitHub que se actualice automáticamente. Ahora puede continuar y agregar todo tipo de elementos dinámicos a su página, simplemente tenga cuidado con los GIF, ¿de acuerdo?