GitHub ActionsでMisskeyのテスト用環境を構築します。
- push毎、定期実行(cron)、webhookなど、柔軟にトリガー可能
- 自動インストール(インストール中のユーザー操作不要)
- 連合やファイル添付などにも対応(基本的に全機能が動作)
- 最大約6時間実行可能(デフォルトは約30分,変更可能)
- デプロイ情報をDiscord(webhook)に送信
- webhookを受信可能なurl(Discord等)
- リポジトリのAction Secretに以下を追加
DISCORD_WEBHOOK_URL : デプロイ情報の送信先url(webhookを受信可能なurl, Discordを推奨) - リポジトリで以下のようなワークフローを構成
name: deploy-test-environment
on:
issue_comment:
types: [created]
workflow_dispatch:
inputs:
repository:
description: 'Repository to deploy (optional, use the repository where this workflow is stored by default)'
required: false
default: ''
branch_or_hash:
description: 'Branch or Commit hash to deploy (optional, use the branch where this workflow is stored by default)'
required: false
default: ''
wait_time:
description: 'Time to wait in seconds (optional, 1800 seconds by default)'
required: false
default: ''
jobs:
get-pr-ref:
runs-on: ubuntu-latest
if: github.event_name == 'issue_comment' && github.event.issue.pull_request && startsWith(github.event.comment.body, '/preview')
outputs:
is-allowed-user: ${{ steps.check-allowed-users.outputs.is-allowed-user }}
pr-ref: ${{ steps.get-ref.outputs.pr-ref }}
wait_time: ${{ steps.get-wait-time.outputs.wait_time }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Check allowed users
id: check-allowed-users
run: |
ALLOWED_USERS="9919,9919" # 実行を許可するユーザーIDをカンマ区切りで入力, ユーザーIDは https://api.github.com/users/hogehoge で確認できます
COMMENT_AUTHOR="${{ github.event.comment.user.id }}"
if [[ ",$ALLOWED_USERS," == *",$COMMENT_AUTHOR,"* ]]; then
echo "is-allowed-user=true" > $GITHUB_OUTPUT
else
echo "is-allowed-user=false" > $GITHUB_OUTPUT
fi
- name: Get PR ref
id: get-ref
env:
GH_TOKEN: ${{ github.token }}
run: |
PR_NUMBER=$(jq --raw-output .issue.number $GITHUB_EVENT_PATH)
PR_REF=$(gh pr view $PR_NUMBER --json headRefName -q '.headRefName')
echo "pr-ref=$PR_REF" > $GITHUB_OUTPUT
- name: Extract wait time
id: get-wait-time
run: |
COMMENT_BODY="${{ github.event.comment.body }}"
WAIT_TIME=$(echo "$COMMENT_BODY" | grep -oP '(?<=/preview\s)\d+' || echo "1800")
echo "wait_time=$WAIT_TIME" > $GITHUB_OUTPUT
deploy-test-environment-pr-comment:
needs: get-pr-ref
if: needs.get-pr-ref.outputs.is-allowed-user == 'true'
uses: joinmisskey/misskey-tga/.github/workflows/deploy-test-environment.yml@main
with:
repository: ${{ github.repository }}
branch_or_hash: ${{ needs.get-pr-ref.outputs.pr-ref }}
wait_time: ${{ needs.get-pr-ref.outputs.wait_time }}
secrets:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
deploy-test-environment-wd:
if: github.event_name == 'workflow_dispatch'
uses: joinmisskey/misskey-tga/.github/workflows/deploy-test-environment.yml@main
with:
repository: ${{ inputs.repository || github.repository }}
branch_or_hash: ${{ inputs.branch_or_hash || github.ref_name }}
wait_time: ${{ inputs.wait_time || '1800' }}
secrets:
DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL }}
Tip
workflowファイルが保存されているリポジトリ・ブランチが、既定のMisskeyリポジトリ・ブランチとして使用されます。つまり、workflowファイルはMisskeyリポジトリ・ブランチ(複数のブランチがある場合には各ブランチ)に保存する必要があります。
Pull Request用のブランチなどにworkflowファイルを保存したくない場合、workflowファイルをデフォルトブランチに保存した上で、workflow_dispatchトリガーでinputsとして repository
と branch_or_hash
を指定することで、任意のリポジトリ・ブランチを使用することができます。
workflow_dispatchを含む一部のトリガーは、workflowがデフォルトブランチに保存されている場合のみ機能します。詳細についてはワークフローをトリガーするイベント - GitHub Docsを確認してください。
- workflowの編集
必要に応じて、トリガーや実行時間を変更してください。 - workflowの実行
設定されたトリガーに基づき、workflowが実行されます。自動でMisskeyの構築が行われ、インストールが完了するとDiscord(webhook)にデプロイ情報が送信されます。
公開先のurlについては、セキュリティ上の観点からログ上ではマスクされます。インスタンスのログは公開されますのでご注意ください(公開しないよう設定も可能ですが、インスタンスに直接接続できないためデバッグが困難になります)。 - Misskeyのテスト
Discord(webhook)に送信されたurlからMisskeyにアクセスし、テストを行ってください。外部インスタンスとの連合も可能ですが、テスト環境が一時的なものであることに留意し、テスト環境間でのみ連合をすることを強く推奨します。 - テストの終了
デフォルトでは、インストール完了から1800秒(30分)で終了します。終了後は全てのデータが消去されますのでご注意ください。インスタンスのログはGitHub Actionsの設定に基づき一定期間保存されます。
joinmisskey/misskey-tgaの0e502cf時点でのワークフロー構成について、GitHub Supportに確認した際の記録を公開しております。リンクはこちらです。
記録内で確認している通り、この記録のmisskey-tgaのREADMEでの参照目的での使用(共有)については、サポート担当者より許可を得ております。
記録内にある通り、GitHub Supportの見解は問い合わせ時点でのワークフロー構成(here)に対するものであり、この構成が変更された場合には見解が当てはまらない可能性があることに留意してください。ここでの変更には、joinmisskey/misskey-tgaにおいて行われた変更も含まれます。
懸念点がある場合には、GitHub Supportに問い合わせることも可能です(有料アカウントが必要です)。