问题描述
希望能够在GitHub的第三方存储库发布新版本时自动构建一个Chocolatey软件包。具体的例子是针对KeyPass2的HIBPOfflineCheck插件,但实际上可以适用于任何托管在GitHub并使用Release功能的软件。
用户希望实现的流程如下:
1. 第三方存储库的作者提交更改到GitHub。
2. 作者创建一个新的发布,可以是手动或自动的。
3. 用户的CI构建被触发。
4. 新的Chocolatey软件包被发布到Chocolatey。
用户考虑到的问题是,尽管可以向原始存储库创建拉取请求来实现,但存在以下问题:
1. 这要求原始作者负责维护Chocolatey软件包,他们可能对此不感兴趣。
2. 他们的CI系统可能无法生成和发布软件包。
3. 他们可能不了解配置Chocolatey API密钥等操作。
尽管在Concourse CI中可以基于新的GitHub发布触发CI构建,但Concourse并不是一个SaaS产品。
解决方案
根据提供的信息,以下是两种可能的解决方案,您可以根据您的偏好和需求选择其中之一。
方案1:使用GitHub API
这种方法涉及使用GitHub API监视最新发布的变化,并在有变化时触发CI构建。
- 使用GitHub API获取第三方存储库的最新发布信息。
- 检查获取到的发布信息的哈希值是否与之前的版本相同。
- 如果哈希值不同,触发您的CI构建。
这可以通过一些脚本或工具来实现,比如Bash脚本调用curl或Python脚本等。
方案2:使用专门的服务
如果您不想自己编写脚本来监视GitHub发布并触发CI构建,您还可以考虑使用一些现成的服务,如Zapier、IFTTT或其他集成平台。这些平台通常提供了与GitHub和CI服务(如CircleCI、Travis CI等)的集成,可以方便地设置触发规则,使您的CI构建与GitHub发布保持同步。
请注意,使用第三方服务可能会涉及到一些安全和隐私问题,您需要仔细评估这些服务是否符合您的需求和标准。
引用
如果您选择方案1,以下是一个简单的Bash脚本示例,用于监视GitHub发布并触发CI构建。请根据您的需求进行修改和适配。
#!/bin/bash
# GitHub API URL for the latest release
GITHUB_API_URL="https://api.github.com/repos/username/repository/releases/latest"
# Hash of the previous response
PREVIOUS_HASH=""
while true; do
# Get the latest release information
response=$(curl -s $GITHUB_API_URL)
# Calculate the hash of the response
current_hash=$(echo $response | md5sum | awk '{print $1}')
if [ "$current_hash" != "$PREVIOUS_HASH" ]; then
# Hash has changed, trigger your CI build here
echo "New release detected. Triggering CI build..."
# Replace this with your CI build command
# For example: ./path/to/your/ci_script.sh
# ...
# Update the previous hash
PREVIOUS_HASH="$current_hash"
fi
# Sleep for a while before checking again
sleep 300
done
请注意,上述示例是一个简化的版本,您可能需要根据实际情况进行修改和扩展,以确保脚本的稳定性和适应性。
无论您选择哪种方案,都需要考虑到GitHub API的调用频率限制和安全性问题。在实际应用中,您可能需要将敏感信息(如API密钥)存储在安全的地方,并确保您的脚本或工具能够正确处理可能的错误情况。
请记住,根据您的具体情况,可能需要对方案进行进一步的调整和定制。