- Publié le
Comment créer des rappels pour partager des articles de blog à l'aide de GitHub Actions
- Auteurs
- Nom
- Imamuzzaki Abu Salam
- https://x.com/ImBIOS_Dev
En tant qu'écrivain, je comprends l'importance de la cohérence lorsqu'il s'agit de publier du nouveau contenu. Cependant, il arrive que la vie nous mette des bâtons dans les roues, et il peut être difficile de se souvenir de la rédaction d'un nouvel article de blog. Pour m'aider à rester sur la bonne voie avec mon calendrier de partage, j'ai créé un rappel simple à l'aide de GitHub Actions. Dans cet article, je vais partager comment j'ai créé ce flux de travail.
Qu'est-ce que GitHub Action ?
GitHub Actions est un outil puissant qui vous permet d'automatiser vos flux de travail. Vous pouvez l'utiliser pour construire, tester et déployer votre code. Vous pouvez également l'utiliser pour effectuer un large éventail d'autres tâches, telles que l'envoi de notifications ou la planification de rappels.
Comment j'ai créé un rappel pour écrire un article de blog
Pour créer un rappel pour écrire un article de blog, j'utilise le répertoire spécial GitHub de README.md et j'ai ajouté un fichier nommé .github/workflows/blog-posts.yml. Dans ce fichier, j'ai défini le flux de travail que GitHub Actions exécuterait. Voici le contenu initial du fichier :
name: Blog Posts
on:
schedule:
- cron: '0 0 * * 0' # Exécuter à 00h00 tous les dimanches
workflow_dispatch:
jobs:
update-posts:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Mettre à jour la liste des articles
run: |
sleep 1m
curl -LO https://blog.imam.dev/feed.xml
node src/list-posts.js
rm feed.xml
- name: Valider les modifications
run: |
git config --local user.email "github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add -A
git diff-index --quiet HEAD || git commit -m "Mettre à jour les articles de blog"
- name: Extraire les modifications
run: git pull -r
- name: Pousser les modifications
uses: ad-m/github-push-action@0fafdd62b84042d49ec0cb92d9cac7f7ce4ec79e
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
Ce flux de travail est déclenché tous les dimanches à 00h00. Il exécute ensuite un script qui met à jour la liste des articles de blog. Le script est écrit en JavaScript et analyse le flux RSS de mon blog. Il génère ensuite une liste d'articles de blog et met à jour le fichier README.md. Enfin, il valide les modifications et les pousse vers GitHub. Je m'inspire du répertoire de ouuan pour ce flux de travail.
D'où vient le rappel ? Il est en fait dans le fichier list-posts.js. J'ai ajouté un rappel à la liste des articles de blog. Voici le contenu du fichier :
const { readFileSync, writeFileSync } = require('fs')
/**
* Convertir une chaîne XML en JSON
* @param {string} xmlString
* @returns {object} json
*/
const xmlToJson = (xmlString) => {
const regex = /<(\w+)([^>]*)>([\s\S]*?)<\/\1>/gm
const matches = xmlString.matchAll(regex)
const json = {}
for (const match of matches) {
const [, key, attributes, value] = match
const subMatches = value.matchAll(regex)
const subJson = {}
for (const subMatch of subMatches) {
const [, subKey, subAttributes, subValue] = subMatch
if (subValue.match(regex)) {
if (Array.isArray(subJson[subKey])) {
subJson[subKey].push(
xmlToJson(`<${subKey}${subAttributes}>${subValue}</${subKey}>`)[subKey]
)
} else if (subJson[subKey]) {
subJson[subKey] = [
subJson[subKey],
xmlToJson(`<${subKey}${subAttributes}>${subValue}</${subKey}>`)[subKey],
]
} else {
subJson[subKey] = xmlToJson(`<${subKey}${subAttributes}>${subValue}</${subKey}>`)[subKey]
}
} else if (Array.isArray(subJson[subKey])) {
subJson[subKey].push(subValue)
} else if (subJson[subKey]) {
subJson[subKey] = [subJson[subKey], subValue]
} else {
subJson[subKey] = subValue
}
}
if (json[key]) {
if (Array.isArray(json[key])) {
json[key].push(subJson)
} else {
json[key] = [json[key], subJson]
}
} else {
json[key] = subJson
}
}
return json
}
/**
* Trier JSON par pubDate
* @param {object} json
* @returns {object} sortedJson
*/
const sortJson = (json) => {
json.sort((a, b) => new Date(b.pubDate) - new Date(a.pubDate))
return json
}
// Lire le fichier XML et le convertir en JSON
const xmlString = readFileSync('feed.xml', 'utf8')
const feeds = sortJson(xmlToJson(xmlString).rss.channel.item)
// Créer une liste Markdown des articles
const posts = feeds
.slice(0, 5)
.map(
(item) =>
`- ${new Date(item.pubDate).toISOString().split('T')[0]} [${item.title}](${
item.link
}?utm_source=GitHubProfile)`
)
// Mettre à jour README.md si les articles ont changé,
// Sinon lancer une erreur pour me rappeler d'écrire un article de blog
const readme = readFileSync('README.md', 'utf8')
if (readme.includes(posts.join('\n'))) {
throw new Error('Aucun nouvel article de blog')
} else {
const updatedReadme = readFileSync('README.md', 'utf8').replace(
/(?<=<!--START_SECTION:blog-posts-->\n)[\s\S]*(?=\n<!--END_SECTION:blog-posts-->)/,
posts.join('\n')
)
writeFileSync('README.md', updatedReadme)
console.log('README.md mis à jour')
}
Le script lit le flux RSS de mon blog et génère une liste d'articles de blog. Il met ensuite à jour le fichier README.md avec la liste des articles de blog. S'il n'y a pas de nouveaux articles de blog, il lance une erreur pour me rappeler d'écrire un article de blog.
Il ne s'agit que d'une erreur qui sera levée lorsque le script est exécuté alors que les articles sont toujours les mêmes, et ce n'est pas un rappel qui sera envoyé à mon adresse e-mail ou quelque chose de plus visible pour moi. J'ai donc décidé d'activer la notification pour toute exécution de flux de travail ayant échoué. Voici comment procéder :
Cliquez sur le coin supérieur droit de la page et sélectionnez Paramètres.
Sélectionnez Notifications dans la barre latérale gauche.
Cliquez sur Actions.
Sélectionnez Envoyer des notifications uniquement pour les flux de travail ayant échoué.
Maintenant, je recevrai une notification lorsque le script sera exécuté et qu'il n'y aura pas de nouveaux articles de blog. Je peux également voir la notification sur le site Web GitHub.
Une autre solution que j'ai explorée
Le flux de travail précédent que je vous ai présenté est une version modifiée afin que mon README.md soit toujours à jour. J'ai également exploré une autre façon de créer un rappel pour écrire un article de blog. Mais il s'agit d'un simple rappel sans aucun mécanisme de mise à jour de README.md, juste un rappel.
Pour créer un rappel pour écrire un article de blog, j'ai créé un nouveau répertoire GitHub et j'ai ajouté un fichier nommé .github/workflows/remind.yml
. Dans ce fichier, j'ai défini le flux de travail que GitHub Actions exécuterait. Voici le contenu du fichier :
name: Rappel pour écrire un article de blog
on:
schedule:
- cron: '0 10 * * 1-5'
jobs:
remind:
runs-on: ubuntu-latest
steps:
- name: Envoyer un rappel
uses: dawidd6/action-send-mail@v3.1.0
with:
server_address: smtp.gmail.com
server_port: 465
username: ${{ secrets.EMAIL_USERNAME }}
password: ${{ secrets.EMAIL_PASSWORD }}
subject: 'Rappel pour écrire un nouvel article de blog'
body: "N'oubliez pas d'écrire un nouvel article de blog aujourd'hui !"
to: my-email@example.com
Ce flux de travail m'envoie un rappel par e-mail tous les jours ouvrables à 10h00, me rappelant d'écrire un nouvel article de blog. J'ai utilisé une action tierce, dawidd6/action-send-mail, pour envoyer l'e-mail. J'ai fourni mes informations d'identification de messagerie en tant que secrets GitHub, afin qu'ils ne soient pas visibles dans le fichier de flux de travail.
Conclusion
J'ai exploré deux façons de créer un rappel pour écrire un article de blog. La première consiste à mettre à jour le fichier README.md de mon profil GitHub. La deuxième consiste à envoyer un rappel par e-mail. J'utilise actuellement la première méthode car elle est plus visible que la deuxième. Je peux voir le rappel à chaque fois que je visite mon profil GitHub.
Créer un rappel pour écrire un article de blog à l'aide de GitHub Actions est un moyen simple et efficace de rester sur la bonne voie avec votre calendrier de blogage. Avec ce flux de travail en place, vous n'oublierez plus jamais d'écrire un nouvel article. Si vous souhaitez créer votre propre flux de travail de rappel, n'hésitez pas à consulter la documentation GitHub Actions pour en savoir plus. Bon blogage !