コンテンツにスキップ

GitHub Actionsと連携

GitHub Actions連携では、PRでビルドしたリリース候補をAbyssへ登録します。登録した時点ではクレジットを消費せず、PRコメントのリンク先でAbyssユーザーが承認するとスキャンが始まります。

APIキーやAbyssアプリケーションIDをGitHub Secretsへ保存する必要はありません。GitHub Actionsが発行する短時間のOIDCトークンで、連携済みリポジトリを安全に識別します。

GitHub Actions連携の画面イメージ

GitHub Appの許可と、Abyssアプリケーションへの紐づけは別の手順です。

この操作には組織管理者権限が必要です。

  1. 「組織」→「連携」→「GitHub Actions」を開く
  2. 「GitHubと連携」を選ぶ
  3. 「GitHub Appをインストール」から、Abyssに許可するリポジトリを選ぶ
  4. GitHubからAbyssへ戻ったら、許可済みリポジトリを選ぶ
  5. 対応するAbyssアプリケーションを選び、「選択したリポジトリを連携」を選ぶ

GitHub Appへアクセスを許可しただけでは、Abyssアプリケーションとの連携は完了しません。手順4〜5も行ってください。

.github/workflows/abyss.ymlを追加します。次の例はAndroidのリリースAPKを登録します。

name: Abyss release security scan
on:
pull_request:
types: [opened, synchronize, reopened]
permissions:
contents: read
id-token: write
jobs:
abyss:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Build release APK
run: ./gradlew assembleRelease
- name: Upload release candidate to Abyss
uses: m1st-ai/abyss-action@v1
with:
version-name: ${{ github.event.pull_request.head.sha }}
android: app/build/outputs/apk/release/app-release.apk

id-token: writeはOIDCトークンの発行に必要です。リポジトリ内容の書き込み権限ではありません。

- name: Upload release candidates to Abyss
uses: m1st-ai/abyss-action@v1
with:
version-name: 1.4.0
version-code: 42
android: path/to/app-release.apk
ios: path/to/App.ipa

Actionで指定できるAndroid成果物はAPKまたはAAB、iOS成果物はIPAです。Web画面から手動アップロードする場合の形式とは異なります。

  1. GitHub Actionsが成功すると、GitHub AppがPRのAbyssコメントを更新する
  2. コメントの確認リンクを開く
  3. アプリケーション、リポジトリ、PR、コミット、バイナリSHA-256を確認する
  4. クレジット残高を確認し、「1クレジットを消費して解析開始」を選ぶ
  5. GitHub Check、PRコメント、Abyssのスキャン詳細で結果を確認する

アップロードとスキャン開始を分けることで、すべてのPR更新で自動的にクレジットを消費することを防ぎます。

同じPR・同じプラットフォームへ新しいバイナリを送ると、未開始の古い提出はSUPERSEDEDになり、最新の成果物が承認対象になります。開始済みスキャンのバイナリは差し替えられません。

同じバイナリはSHA-256で識別されます。ワークフローを再実行してもコメントを増やさず、既存のAbyssコメントを更新します。

この連携は永続的なSecretを使いませんが、PRイベント、OIDCのclaim、連携済みリポジトリをAbyss側で検証します。pull_request_targetで信頼していないコードをcheckout・実行する構成にはしないでください。

症状 確認すること
OIDCトークンが取得できない jobまたはworkflowにid-token: writeがあるか
リポジトリが未連携と表示される GitHub Appの許可後、Abyssアプリケーションへの紐づけまで完了したか
成果物が見つからない ビルドコマンドとandroid / iosのパスが一致しているか
コメント後に自動開始しない 意図した動作。確認リンクでクレジット消費を承認する
古いリンクを開けない 最新コミットの提出を開く。古い提出はSUPERSEDEDの可能性がある