Scoring #57
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Scoring | |
on: | |
workflow_run: | |
workflows: | |
- Request | |
types: | |
- completed | |
env: | |
TZ: "Asia/Tokyo" | |
WSH_SCORING_DEBUG: "${{ secrets.WSH_SCORING_DEBUG }}" | |
WSH_SCORING_TARGET_PATHS: "${{ secrets.WSH_SCORING_TARGET_PATHS }}" | |
DISCORD_WEBHOOK_URL: "${{ secrets.DISCORD_WEBHOOK_URL }}" | |
jobs: | |
payload: | |
runs-on: ubuntu-20.04 | |
if: ${{ github.event.workflow_run.conclusion == 'success' }} | |
outputs: | |
competition-status: ${{ steps.status.outputs.result }} | |
result: ${{ steps.payload.outputs.result }} | |
steps: | |
- name: Download payload | |
uses: dawidd6/[email protected] | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
workflow: .github/workflows/request.yml | |
run_id: ${{ github.event.workflow_run.id }} | |
name: payload.json | |
path: /tmp | |
- name: Read payload | |
uses: actions/[email protected] | |
id: payload | |
with: | |
result-encoding: json | |
script: | | |
const payload = require('/tmp/payload.json'); | |
return payload; | |
- name: Check competition status | |
uses: actions/[email protected] | |
id: status | |
with: | |
result-encoding: string | |
script: | | |
const payload = require('/tmp/payload.json'); | |
const startAt = new Date('2024-12-19T00:00:00.000+09:00'); | |
const endAt = new Date('2025-01-31T23:59:59.000+09:00'); | |
const requestedAt = new Date(payload.request_time); | |
if (requestedAt < startAt || endAt < requestedAt) { | |
return 'closed'; | |
} | |
return 'opened'; | |
vrt: | |
runs-on: ubuntu-20.04 | |
needs: | |
- payload | |
if: needs.payload.outputs.competition-status == 'opened' | |
outputs: | |
details: ${{ steps.details.outputs.result }} | |
result: ${{ steps.result.outputs.result }} | |
concurrency: scoring-${{ fromJSON(needs.payload.outputs.result).id }} | |
steps: | |
- uses: actions/[email protected] | |
- uses: actions/[email protected] | |
with: | |
node-version: "18" | |
cache: "yarn" | |
- run: yarn install --frozen-lockfile | |
- run: yarn build | |
- run: sudo apt-get install -y fonts-noto-cjk | |
- name: Run VRT | |
id: vrt | |
run: | | |
yarn run vrt:capture --url ${TARGET_URL} | |
yarn run vrt:detect | |
env: | |
TARGET_URL: ${{ fromJSON(needs.payload.outputs.result).url }} | |
- name: Upload payload | |
uses: actions/[email protected] | |
with: | |
name: screenshots | |
path: ./scripts/vrt/tmp/* | |
retention-days: 1 | |
- name: Read details | |
uses: actions/[email protected] | |
id: details | |
with: | |
result-encoding: json | |
script: | | |
const payload = require('./scripts/vrt/tmp/reg.json'); | |
return payload; | |
- name: Read result | |
uses: actions/[email protected] | |
id: result | |
with: | |
result-encoding: string | |
script: | | |
const payload = require('./scripts/vrt/tmp/reg.json'); | |
return payload.failedItems.length === 0 ? 'success' : 'failed'; | |
scoring: | |
runs-on: ubuntu-20.04 | |
needs: | |
- payload | |
- vrt | |
outputs: | |
result: ${{ steps.scoring.outputs.export }} | |
concurrency: scoring-${{ fromJSON(needs.payload.outputs.result).id }} | |
steps: | |
- uses: actions/[email protected] | |
- uses: actions/[email protected] | |
with: | |
node-version: "18" | |
cache: "yarn" | |
- run: yarn install --frozen-lockfile | |
- run: yarn build | |
- run: sudo apt-get install -y fonts-noto-cjk | |
- name: Scoring | |
id: scoring | |
run: | | |
yarn run scoring \ | |
--id ${TARGET_ID} \ | |
--url ${TARGET_URL} | |
env: | |
TARGET_ID: ${{ fromJSON(needs.payload.outputs.result).id }} | |
TARGET_URL: ${{ fromJSON(needs.payload.outputs.result).url }} | |
update: | |
runs-on: ubuntu-20.04 | |
needs: | |
- payload | |
- vrt | |
- scoring | |
if: needs.vrt.outputs.result == 'success' | |
outputs: | |
result: ${{ steps.update.outputs.export }} | |
concurrency: update-leader-board | |
steps: | |
- uses: actions/[email protected] | |
with: | |
ref: main | |
- uses: actions/[email protected] | |
with: | |
node-version: "18" | |
cache: "yarn" | |
- run: yarn install --frozen-lockfile | |
- run: yarn build | |
- name: Update leader board | |
id: update | |
run: | | |
yarn run update \ | |
--markdown ${GITHUB_WORKSPACE}/README.md \ | |
--score-csv ${GITHUB_WORKSPACE}/score.csv \ | |
--id ${TARGET_ID} \ | |
--url ${TARGET_URL} \ | |
--score ${TARGET_SCORE} | |
env: | |
TARGET_ID: ${{ fromJSON(needs.payload.outputs.result).id }} | |
TARGET_URL: ${{ fromJSON(needs.payload.outputs.result).url }} | |
TARGET_SCORE: ${{ fromJSON(needs.scoring.outputs.result).result.score }} | |
- name: Commit leader board | |
uses: stefanzweifel/[email protected] | |
with: | |
commit_user_name: "github-actions[bot]" | |
commit_user_email: "github-actions[bot]@users.noreply.github.com" | |
commit_author: "github-actions[bot] <github-actions[bot]@users.noreply.github.com>" | |
comment-payload: | |
runs-on: ubuntu-20.04 | |
needs: | |
- payload | |
steps: | |
- name: Competition is Closed Comment | |
uses: peter-evans/[email protected] | |
if: needs.payload.outputs.competition-status != 'opened' | |
with: | |
comment-id: ${{ fromJSON(needs.payload.outputs.result).report_comment_id }} | |
edit-mode: replace | |
body: | | |
:warning: **スコアを計測できませんでした** | |
コンテスト開催前、もしくは、コンテストが終了しています | |
--- | |
:information_source: `/retry` とコメントすると、もう一度計測ができます | |
:information_source: 登録内容を変更する場合は、issue を閉じて作り直してください | |
- name: Comment | |
uses: peter-evans/[email protected] | |
if: needs.payload.outputs.competition-status == 'opened' | |
with: | |
comment-id: ${{ fromJSON(needs.payload.outputs.result).report_comment_id }} | |
edit-mode: replace | |
body: | | |
## レギュレーションチェック | |
:hourglass_flowing_sand: **VRT を実行しています** | |
--- | |
Actions: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
comment-failure-vrt: | |
runs-on: ubuntu-20.04 | |
needs: | |
- payload | |
- vrt | |
- comment-payload | |
if: always() && needs.vrt.result == 'failure' | |
steps: | |
- name: Comment | |
uses: peter-evans/[email protected] | |
with: | |
comment-id: ${{ fromJSON(needs.payload.outputs.result).report_comment_id }} | |
edit-mode: replace | |
body: | | |
## レギュレーションチェック | |
:exclamation: **VRT が実行できませんでした** | |
次を確認してください | |
- URL が間違っていませんか | |
- API `POST /api/initialize` が実行できますか | |
- 計測対象のページは、誰でも閲覧できるようになっていますか | |
- エラーページ以外では、ステータスコードが 200 で返却されますか | |
--- | |
Actions: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
:information_source: `/retry` とコメントすると、もう一度計測ができます | |
:information_source: 登録内容を変更する場合は、issue を閉じて作り直してください | |
comment-vrt: | |
runs-on: ubuntu-20.04 | |
needs: | |
- payload | |
- vrt | |
- comment-payload | |
steps: | |
- name: Comment | |
uses: peter-evans/[email protected] | |
with: | |
comment-id: ${{ fromJSON(needs.payload.outputs.result).report_comment_id }} | |
edit-mode: replace | |
body: | | |
## レギュレーションチェック | |
${{ (needs.vrt.outputs.result == 'success' && '**差分はありませんでした**') || '**一部のページに差分があります**' }} | |
<details> | |
<summary>差分が見つかったページ</summary> | |
- :information_source: スクリーンショットは、スコア計測後に、Actions の Artifacts からダウンロードできます | |
```json | |
${{ toJSON(fromJSON(needs.vrt.outputs.details).failedItems) }} | |
``` | |
</details> | |
## スコア | |
:hourglass_flowing_sand: **Lighthouse でスコアを計測しています** | |
--- | |
Actions: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
comment-failure-scoring: | |
runs-on: ubuntu-20.04 | |
needs: | |
- payload | |
- vrt | |
- scoring | |
- comment-vrt | |
if: always() && needs.scoring.result == 'failure' | |
steps: | |
- name: Comment | |
uses: peter-evans/[email protected] | |
with: | |
comment-id: ${{ fromJSON(needs.payload.outputs.result).report_comment_id }} | |
edit-mode: replace | |
body: | | |
## レギュレーションチェック | |
${{ (needs.vrt.outputs.result == 'success' && '**差分はありませんでした**') || '**一部のページに差分があります**' }} | |
<details> | |
<summary>差分が見つかったページ</summary> | |
- :information_source: スクリーンショットは、スコア計測後に、Actions の Artifacts からダウンロードできます | |
```json | |
${{ toJSON(fromJSON(needs.vrt.outputs.details).failedItems) }} | |
``` | |
</details> | |
## スコア | |
:exclamation: **Lighthouse の計測ができませんでした** | |
次を確認してください | |
- URL が間違っていませんか | |
- 計測対象のページは、誰でも閲覧できるようになっていますか | |
- エラーページ以外では、ステータスコードが 200 で返却されますか | |
--- | |
Actions: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
:information_source: `/retry` とコメントすると、もう一度計測ができます | |
:information_source: 登録内容を変更する場合は、issue を閉じて作り直してください | |
comment-scoring: | |
runs-on: ubuntu-20.04 | |
needs: | |
- payload | |
- vrt | |
- scoring | |
- comment-vrt | |
steps: | |
- name: Comment | |
uses: peter-evans/[email protected] | |
if: needs.vrt.outputs.result == 'success' | |
with: | |
comment-id: ${{ fromJSON(needs.payload.outputs.result).report_comment_id }} | |
edit-mode: replace | |
body: | | |
## レギュレーションチェック | |
${{ (needs.vrt.outputs.result == 'success' && '**差分はありませんでした**') || '**一部のページに差分があります**' }} | |
<details> | |
<summary>差分が見つかったページ</summary> | |
- :information_source: スクリーンショットは、スコア計測後に、Actions の Artifacts からダウンロードできます | |
```json | |
${{ toJSON(fromJSON(needs.vrt.outputs.details).failedItems) }} | |
``` | |
</details> | |
## スコア | |
スコアは **${{ fromJSON(needs.scoring.outputs.result).result.score }}** です | |
:hourglass_flowing_sand: リーダーボードを更新中です... | |
<details> | |
<summary>buildInfo</summary> | |
```json | |
${{ toJSON(fromJSON(needs.scoring.outputs.result).buildInfo) }} | |
``` | |
</details> | |
--- | |
Actions: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
- name: Comment | |
uses: peter-evans/[email protected] | |
if: needs.vrt.outputs.result != 'success' | |
with: | |
comment-id: ${{ fromJSON(needs.payload.outputs.result).report_comment_id }} | |
edit-mode: replace | |
body: | | |
## レギュレーションチェック | |
${{ (needs.vrt.outputs.result == 'success' && '**差分はありませんでした**') || '**一部のページに差分があります**' }} | |
<details> | |
<summary>差分が見つかったページ</summary> | |
- :information_source: スクリーンショットは、スコア計測後に、Actions の Artifacts からダウンロードできます | |
```json | |
${{ toJSON(fromJSON(needs.vrt.outputs.details).failedItems) }} | |
``` | |
</details> | |
## スコア | |
スコアは **${{ fromJSON(needs.scoring.outputs.result).result.score }}** です | |
:warning: VRT で差分があったため、リーダーボードには反映されません | |
<details> | |
<summary>buildInfo</summary> | |
```json | |
${{ toJSON(fromJSON(needs.scoring.outputs.result).buildInfo) }} | |
``` | |
</details> | |
--- | |
Actions: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
:information_source: `/retry` とコメントすると、もう一度計測ができます | |
:information_source: 登録内容を変更する場合は、issue を閉じて作り直してください | |
comment-failure-update: | |
runs-on: ubuntu-20.04 | |
needs: | |
- payload | |
- vrt | |
- scoring | |
- update | |
- comment-scoring | |
if: always() && needs.update.result == 'failure' | |
steps: | |
- name: Comment | |
uses: peter-evans/[email protected] | |
with: | |
comment-id: ${{ fromJSON(needs.payload.outputs.result).report_comment_id }} | |
edit-mode: replace | |
body: | | |
## レギュレーション | |
${{ (needs.vrt.outputs.result == 'success' && '**差分はありませんでした**') || '**一部のページに差分があります**' }} | |
<details> | |
<summary>差分が見つかったページ</summary> | |
- :information_source: スクリーンショットは、スコア計測後に、Actions の Artifacts からダウンロードできます | |
```json | |
${{ toJSON(fromJSON(needs.vrt.outputs.details).failedItems) }} | |
``` | |
</details> | |
## スコア | |
スコアは **${{ fromJSON(needs.scoring.outputs.result).result.score }}** です | |
:exclamation: **リーダーボードが更新できませんでした** | |
<details> | |
<summary>buildInfo</summary> | |
```json | |
${{ toJSON(fromJSON(needs.scoring.outputs.result).buildInfo) }} | |
``` | |
</details> | |
--- | |
Actions: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
:information_source: `/retry` とコメントすると、もう一度計測ができます | |
:information_source: 登録内容を変更する場合は、issue を閉じて作り直してください | |
comment-update: | |
runs-on: ubuntu-20.04 | |
needs: | |
- payload | |
- vrt | |
- scoring | |
- update | |
- comment-scoring | |
steps: | |
- name: Comment | |
uses: peter-evans/[email protected] | |
with: | |
comment-id: ${{ fromJSON(needs.payload.outputs.result).report_comment_id }} | |
edit-mode: replace | |
body: | | |
## レギュレーションチェック | |
${{ (needs.vrt.outputs.result == 'success' && '**差分はありませんでした**') || '**一部のページに差分があります**' }} | |
<details> | |
<summary>差分が見つかったページ</summary> | |
- :information_source: スクリーンショットは、スコア計測後に、Actions の Artifacts からダウンロードできます | |
```json | |
${{ toJSON(fromJSON(needs.vrt.outputs.details).failedItems) }} | |
``` | |
</details> | |
## スコア | |
スコアは **${{ fromJSON(needs.scoring.outputs.result).result.score }}** です | |
現在、**${{ fromJSON(needs.update.outputs.result).rank }} 位**です | |
<details> | |
<summary>buildInfo</summary> | |
```json | |
${{ toJSON(fromJSON(needs.scoring.outputs.result).buildInfo) }} | |
``` | |
</details> | |
--- | |
Actions: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} | |
:information_source: `/retry` とコメントすると、もう一度計測ができます | |
:information_source: 登録内容を変更する場合は、issue を閉じて作り直してください |