本サイトにはプロモーションが含まれています
Excelファイルの差分をプルリクエストにコメントするGitHub Actoinsのワークフローを作りました。
完成形
GitHub Actionsのコードは以下になります。
name: CI for excel diff
on:
pull_request:
branches:
- 'main'
types: [opened, synchronize, closed]
permissions:
id-token: write
contents: read
pull-requests: write
jobs:
comment_diff:
runs-on: ubuntu-latest
env:
TIKA_VERSION: 2.7.0
BASE_BRANCH: main
DIFF_PATH: 'docs/*.xlsx'
steps:
- name: Switch to pull request branch
uses: actions/checkout@v3
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Fetch base branch
run: git fetch origin ${BASE_BRANCH}:${BASE_BRANCH}
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: Set up tika
run: |
curl -s -o /usr/local/bin/tika.jar --create-dirs -L "https://archive.apache.org/dist/tika/${TIKA_VERSION}/tika-app-${TIKA_VERSION}.jar"
- name: Run actions using diff_files
run: |
git config --global diff.openxml.textconv ./scripts/unopenxml
echo "DIFF<<EOF" >> $GITHUB_ENV
git diff ${BASE_BRANCH} HEAD -- "${DIFF_PATH}" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: comment
uses: marocchino/sticky-pull-request-comment@v2
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
header: diff excel files
message: |
<details>
<summary>Show Diff Excel Files</summary>
```
${{ env.DIFF }}
```
</details>
#!/bin/sh
java -jar /usr/local/bin/tika.jar -t "$1"
*.xlsx diff=openxml
差分の見え方の例
セルの変更
例えば、以下のようにセルの内容を変更します。
上記エクセルをPRすると、以下のように変更した行に対しての差分内容がコメントされます。
行の追加
以下のように行を追加します。
上記エクセルをPRすると、以下のように差分内容がコメントされます。
行の削除
以下のように行を削除します。
上記エクセルをPRすると、以下のように差分内容がコメントされます。
解説
バイナリファイルのExcelファイルをテキストベースで差分比較するため、Apache Tikaを使いました。
Apache Tika™ツールキットは、1000種類以上のファイルタイプ(PPT、XLS、PDFなど)からメタデータやテキストを検出し、抽出します。これらのファイルタイプはすべて、単一のインターフェースで解析することができ、Tikaは、検索エンジンのインデックス作成、コンテンツ分析、翻訳など、さまざまな用途に役立ちます。
引用元:https://tika.apache.org/ (原文訳)
また、.gitattributes
で.xlsxファイルに対するdiff
は、tikaでテキスト化した結果を日あっ区するように指定しています。
*.xlsx diff=openxml
#!/bin/sh
java -jar /usr/local/bin/tika.jar -t "$1"
上記をGitHub Actionsで使うため、main.yaml
で以下コマンドを実行しています。
...
- name: Run actions using diff_files
run: |
git config --global diff.openxml.textconv ./scripts/unopenxml
今回の例では、docsディレクトリ配下の*.xlsxファイルの差分を検出しPRにコメントするようにしています。
実際に差分表示に用いたリポジトリ
また、実際のPRは以下になります。
- https://github.com/luckyriverr/ci-excel-diff/pull/3
- https://github.com/luckyriverr/ci-excel-diff/pull/4
- https://github.com/luckyriverr/ci-excel-diff/pull/5
コピペ利用は全く問題ありませんので、是非ご活用ください。
参考リンク
PR
本サイトにはプロモーションが含まれています