LoginSignup
1

More than 3 years have passed since last update.

php-audit-action(β版)をマーケットプレイスに公開してみた

Last updated at Posted at 2019-12-15

はじめに

みなさん大好きnpm auditのPHP(composer)版があったとして、それをGithub Actionで動かせたら面白いかなと思いやってみました。
作ったものの紹介とそれをマーケットに公開するために何をしたかざっくり説明します。

利用したもの

知っていたはいたもののcomposer auditなコマンドは存在しないので、まずググりました。
composer auditでググると出てきたissueを元にざっくり調査。そのなかでも扱いやすそうで、スターも多めなsensiolabs/security-checkerを活用させていただきました。これはcomposer.lockを食わせれば、該当ライブラリのcve情報などがわかるものとなっています。

作ったもの

プロジェクト

glassmonkey/actions-php-auditになります。
マーケットプレイスにも公開されています。

実行結果

最初にどんなものを作ったかの説明のために実行結果を載せておきます。

今回は自分の検証も兼ねてphp5系で作ったバージョン4系のLaravelcomposer.lockに対して実行させてみました。

Github.comのActionsのコンソール画面にCVEの内容が出力がされる程度のものを作りました。改行などめちゃくちゃですが。
https://github.com/glassmonkey/actions-php-audit/commit/61779f5fe69965ca7af7d368ab0dec012a38585a/checks?check_suite_id=359400216
スクリーンショット 2019-12-16 5.04.08.png

使い方

実際に使い方サンプルを載せていいますが、このような形です。
https://github.com/glassmonkey/actions-php-audit/blob/master/.github/workflows/alert.yml

name: Alert Composer Audit
on:
  push:
    branches:
      - master
jobs:
  check-validate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1
      - uses: glassmonkey/actions-php-audit@v0.1.1
        id: checker
        with:
          WORK_DIR: path/to/dir
      # Todo other actions
      - name: sample message
        run: echo "${{ steps.checker.outputs.message }}"

WORK_DIRという形で、composer.lockが存在するパス(プロジェクトルートからの相対パス、プロジェクトルートなら不要)を引数に与えることで動くようにしています。

出力結果は ここで示すように

${{ steps.checker.outputs.message }}

で取り出すことが出来ます。現時点でもslack通知のメッセージにこれにするなどすれば無理やり送れなくもなかったりはします。
しかし、めちゃくちゃ汚いので今後改修予定です。

なお、ここで注意なことが1点あります。出力データを取得する場合は他のactionから参照するために、idを指定する必要があることです。
今回はcheckerというidを付与しているので出力結果の参照が可能になっています。


 - uses: glassmonkey/actions-php-audit@v0.1.1
   id: checker

マーケットプレイスへの公開手順

こちらのページを参考にさせていただきました。

action.ymlを配置する。

参考はmetadata-syntax-for-github-actionsを参照

例はこちら

name: 'PHP AUDIT ACTION'
description: 'GitHub Actions for PHP LIbrary Secrity Checker'
author: 'glassmonkey'
runs:
  using: 'docker'
  image: 'Dockerfile'
  env:
    WORK_DIR: ${{ inputs.WORK_DIR }}
branding:
  icon: 'upload-cloud'
  color: 'blue'
inputs:
  WORK_DIR:
    description: Relative path of the directory where composer.lock exists
    required: false
    default: ""
outputs:
  message:
    description: "Using your library have security information"

※ これがきちんとと作られた状態だと
uses: glassmonkey/actions-php-audit@v0.1.1の代わりにuses: ./とローカル指定ができるようになるのでprivateリポジトリ下のactionを使う場合や検証などができます。(参照: https://help.github.com/ja/actions/automating-your-workflow-with-github-actions/creating-a-docker-container-action#testing-out-your-action-in-a-workflow)

Readmeをきちんと書く。

せっかくなのでReadmeのガイドラインがあるので目を通しておくとよきです。
https://help.github.com/ja/actions/automating-your-workflow-with-github-actions/creating-a-docker-container-action#create-a-readme

リリースをする

基本的にはリリース作業をすればマーケットプレイスへの公開も連動して行われる。

バリデーション

Publish this Action to the GitHub Marketplaceのチェックは2段階認証の設定が必須なのでお忘れなく。

チェックをすれば自動でバリデーションが行われる。
スクリーンショット 2019-12-16 5.53.29.png

カテゴリもっぽいものを選ぶ

スクリーンショット 2019-12-16 5.57.47.png

タグをつけてリリース

スクリーンショット 2019-12-16 5.58.46.png

結果

公開が完了しているとリポジトリに下記のような通知がでます。

スクリーンショット 2019-12-16 5.37.14.png
マーケットプレイスにも公開されました。

余談とこれから

本来はissueを立てるか、slack通知をするなりしたほうが良かったのですが、時間がなかった点と今後の拡張性をもたせたかったので、とりあえずは別actionと組み合わせる前提の作りにしています。
今後はissueを立てる機能を追加するなり、slack通知するなり見当しようかなと思います。

出力結果に関してですが、1変数に出力する形で下記のように行っています。この方法だと複数行出力場合は1行で切られてしまっていたので、1つの文字列に改行込みは色々無理がありそうです::

なお、::set-output仕様で専用の出力フォーマットとして定められています。


PHP_AUDIT_MESSAG=$(php /opt/security-checker/security-checker security:check composer.lock)
echo ::set-output name=message::${PHP_AUDIT_MESSAG}

感想

前職では結構ライブラリの脆弱性の観測はおざなりになっていたので、確認できる環境を作らないとですね。
npm auditは良い機能です。
適当に作ったので、課題は多いですがマーケット公開まで簡単に出来たのは学びでした。
ぜひみなさんも自動化を秘伝のたれで終わらせるのではなく共有しちゃいましょうw

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
1