惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
Apple Machine Learning Research
Apple Machine Learning Research
宝玉的分享
宝玉的分享
M
MIT News - Artificial intelligence
S
SegmentFault 最新的问题
博客园 - 叶小钗
量子位
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - Franky
博客园 - 司徒正美
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
人人都是产品经理
人人都是产品经理
Hugging Face - Blog
Hugging Face - Blog
V
Visual Studio Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 【当耐特】
Google DeepMind News
Google DeepMind News
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
博客园_首页
U
Unit 42
月光博客
月光博客
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

老麦笔记

回望与期待 | 老麦笔记 人生如戏 何必认真 | 老麦笔记 博客接入 EdgeOne | 老麦笔记 将网易云歌单转移到 Apple Music | 老麦笔记 阿里云轻量服务器出网流量监控脚本 | 老麦笔记 在群晖虚拟机上安装 OpenWRT 来解决网络问题 | 老麦笔记 macOS 自动连接蓝牙音箱 | 老麦笔记 删除 macOS 启动台上 Creative Cloud 的相关图标 | 老麦笔记 四年博客路,成长与淡然 | 老麦笔记
利用 Repository Dispatch 触发 Github Actions 工作流 | 老...
2025-01-20 · via 老麦笔记

为提升加载速度,我先前把 Mastodon 集成到博客首页时,采用了静态处理方式。由于博客是通过 Github Actions 构建的,便需要找到一种在 Mastodon 更新后能触发 Github Actions 工作流的方法。实际上,实现这一目标的途径有不少。基于个人需求,我最终选择利用 Mastodon API 结合 Repository Dispatch 来触发 Github Actions 工作流。

Repository Dispatch 工作原理

Repository Dispatch 的核心在于通过向 Github API 发送特定的 HTTP 请求,来触发仓库中的工作流。具体来说,我们可以在请求中指定要触发的工作流以及相关的参数,Github 接收到请求后,会按照预设的规则启动相应的工作流。这就好比给 Github 发送了一个启动信号,告诉它 “嘿,是时候运行这个工作流啦!” 例如,我们可以定时运行脚本,通过 Repository Dispatch 触发 Github Actions 工作流,实现定期自动部署。

一、创建 Github token

要通过 repository_dispatch 事件触发 Github Actions 工作流,需创建一个 Github token,并且这个 token 需要相应的权限来触发工作流并执行相关操作。

Github token 权限选择

二、创建 Shell 脚本来监听 Mastodon API 并按需发送请求来触发工作流

#!/bin/bash

# API URL 只获取最新的三条数据
API_URL="https://Mastodon实例/api/v1/accounts/用户ID/statuses?limit=3"

# POST 地址
POST_URL="https://api.github.com/repos/用户名/仓库名/dispatches"

# GITHUB TOKEN 格式如 AUTH_HEADER="Authorization: Bearer ghp_1234567890987654321"
AUTH_HEADER="Authorization: Bearer Github token"
CONTENT_HEADER="Content-Type: application/json"

# 存储上次获取的数据的本地文件
LAST_DATA_FILE="/root/mastodon/last_status.json"

# 获取 API 数据
current_data=$(curl -s "$API_URL")

# 如果没有旧数据,初始化
if [[ ! -f "$LAST_DATA_FILE" ]]; then
    echo "$current_data" > "$LAST_DATA_FILE"
    exit 0
fi

# 将当前数据与上次数据进行比较,如果数据不一样就发送 POST 请求
last_data=$(cat "$LAST_DATA_FILE")

if [[ "$current_data" != "$last_data" ]]; then
    curl -X POST \
        "$POST_URL" \
        -H "$AUTH_HEADER" \
        -H "$CONTENT_HEADER" \
        -d '{
            "event_type": "mastodon-post",
            "client_payload": {
                "user": "username",
                "status": "Some status content"
            }
        }'

    # 更新数据供下次对比使用
    echo "$current_data" > "$LAST_DATA_FILE"
fi

三、创建定时任务

使用 crontab -e 来创建定时任务来运行上面创建的 Shell 脚本,在任务列表后添加任务。

*/10 * * * * /root/mastodon/mastodon_check.sh

四、创建新的工作流

在项目里创建 .github/workflows/mastodon.yml 来配置新的工作流,便于区分。这里只需将原来的工流复制一份,修改其中的 on 参数。

如:

on:
  push:
    branches: ['main']
  workflow_dispatch:

修改成

on:
  repository_dispatch:
    types: [mastodon-post]

END