Comment je planifie mes posts Bluesky sans SaaS

Je planifie trois posts Bluesky chaque jour en utilisant GitHub Actions et un fichier JSONL. Je n'utilise aucun service de planification externe.

Le système fonctionne à l'aide d'un seul fichier : content/bluesky-queue.jsonl.

Chaque ligne de ce fichier est un objet JSON.

  • Les lignes non publiées ne contiennent que du texte.
  • Les lignes publiées incluent un horodatage et une URI de post.

Le script lit le fichier de haut en bas. Il trouve la première ligne sans horodatage, la publie, puis met à jour cette ligne.

Pourquoi j'utilise le JSONL plutôt qu'une base de données :

  • Il est facile de suivre les modifications dans Git.
  • N'importe quel job CI peut ajouter une nouvelle ligne au fichier.
  • Cela permet de garder une configuration simple et gratuite.

Gestion des exigences de l'API Bluesky Bluesky nécessite des « facets » pour les liens et les hashtags. Vous ne pouvez pas simplement envoyer du texte. Vous devez fournir les positions exactes en octets pour ces éléments.

J'utilise un script pour calculer ces positions. J'utilise TextEncoder pour obtenir les décalages d'octets UTF-8. Cela évite les erreurs lors de l'utilisation d'emojis. Les caractères et les octets ne sont pas la même chose.

Optimisation de GitHub Actions GitHub Actions s'exécute souvent avec du retard si vous planifiez des tâches au début de l'heure. Pour corriger cela, j'utilise un décalage de minutes. Au lieu de 00:00, j'utilise 23:37. Cela réduit les délais.

J'ajoute également un délai aléatoire compris entre 0 et 5 minutes avant la publication. Cela rend le rythme de publication plus humain. Cela évite le timing machine exact que certains algorithmes ont tendance à déprioriser.

Prévenir les boucles infinies Lorsque le script met à jour la file d'attente, il effectue un commit de la modification dans le dépôt. Cela pourrait déclencher à nouveau le workflow.

Je résous ce problème avec une garde dans le message de commit :

  • Le script ajoute [skip bluesky-queue] au message de commit.
  • Le workflow recherche cette balise.
  • Si la balise existe, le workflow ne s'exécute pas.

Ce système fait partie d'une expérience à long terme avec des sites organisés par IA. Il reste léger, économique et fiable.

Source : https://dev.to/morinaga/how-i-schedule-three-daily-bluesky-posts-from-a-jsonl-queue-without-an-external-service-mno