はじめに
技術書典で本を書いています
Re:VIEWでビルドするworkflowをgithub actionsで作成していますが、ビルドしたPDFをDiscordへアップロードする部分をactionとして公開してみました(おもしろそうだったので)
作ったもの
sinshutu/upload-to-discord: A GitHub Action that uploads a file to Discord channel.
作り方
簡単には以下の3つの手順です
- entrypoint.shを作成
- Dockerfileを作成
- workflowに組み込む
entrypoint.shを作成
Discordへファイルをアップロードする方法を調べる
webhookのurlをcurlで叩くのがシンプルそうなのでそれを調べる
cURL · Discord Webhooks Guide を参考にcurlコマンドで送信
curlでファイルを送信する場合は -F オプションが使える
ファイルを指定する場合は curl -F "file=@/path/to/file"
のように @を付ける必要がある
curl option 覚え書き - Qiita
結果として以下のような感じで送信するように
curl -H 'Content-Type: multipart/form-data' \
-X POST \
-F "file=@$1" $DISCORD_WEBHOOK
$1
はコマンドの第一引数
$DISCORD_WEBHOOK
はGithubのSecretsに登録した環境変数が読み込まれる
Dockerfileを作成する
curlが実行できるDockerイメージを作成するだけなのでベースには alpine
を使う
actionに使われるLABELの設定と先ほど作成したentrypoint.shをCOPYする
FROM alpine:latest
LABEL author="@sinshutu"
LABEL "com.github.actions.name"="Upload to Discord"
LABEL "com.github.actions.description"="Uploads a file to Discord channel."
LABEL "com.github.actions.icon"="package"
LABEL "com.github.actions.color"="blue"
RUN apk add --no-cache curl
COPY entrypoint.sh /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
workflowに組み込む
README を参照ください
おわりに
以外と簡単に作れました
この程度ならactionにする必要ないのでは?って思ってたりする
Slackへファイルアップロードするのも欲しいかも