mirror of https://github.com/ppy/osu
197 lines
6.9 KiB
YAML
197 lines
6.9 KiB
YAML
# ## Description
|
|
#
|
|
# Uses [diffcalc-sheet-generator](https://github.com/smoogipoo/diffcalc-sheet-generator) to run two builds of osu and generate an SR/PP/Score comparison spreadsheet.
|
|
#
|
|
# ## Requirements
|
|
#
|
|
# Self-hosted runner with installed:
|
|
# - `docker >= 20.10.16`
|
|
# - `docker-compose >= 2.5.1`
|
|
# - `lbzip2`
|
|
# - `jq`
|
|
#
|
|
# ## Usage
|
|
#
|
|
# The workflow can be run in two ways:
|
|
# 1. Via workflow dispatch.
|
|
# 2. By an owner of the repository posting a pull request or issue comment containing `!diffcalc`.
|
|
# For pull requests, the workflow will assume the pull request as the target to compare against (i.e. the `OSU_B` variable).
|
|
# Any lines in the comment of the form `KEY=VALUE` are treated as variables for the generator.
|
|
#
|
|
# ## Google Service Account
|
|
#
|
|
# Spreadsheets are uploaded to a Google Service Account, and exposed with read-only permissions to the wider audience.
|
|
#
|
|
# 1. Create a project at https://console.cloud.google.com
|
|
# 2. Enable the `Google Sheets` and `Google Drive` APIs.
|
|
# 3. Create a Service Account
|
|
# 4. Generate a key in the JSON format.
|
|
# 5. Encode the key as base64 and store as an **actions secret** with name **`DIFFCALC_GOOGLE_CREDENTIALS`**
|
|
#
|
|
# ## Environment variables
|
|
#
|
|
# The default environment may be configured via **actions variables**.
|
|
#
|
|
# Refer to [the sample environment](https://github.com/smoogipoo/diffcalc-sheet-generator/blob/master/.env.sample), and prefix each variable with `DIFFCALC_` (e.g. `DIFFCALC_THREADS`, `DIFFCALC_INNODB_BUFFER_SIZE`, etc...).
|
|
|
|
name: Run difficulty calculation comparison
|
|
|
|
run-name: "${{ github.event_name == 'workflow_dispatch' && format('Manual run: {0}', inputs.osu-b) || 'Automatic comment trigger' }}"
|
|
|
|
on:
|
|
issue_comment:
|
|
types: [ created ]
|
|
workflow_dispatch:
|
|
inputs:
|
|
osu-b:
|
|
description: "The target build of ppy/osu"
|
|
type: string
|
|
required: true
|
|
ruleset:
|
|
description: "The ruleset to process"
|
|
type: choice
|
|
required: true
|
|
options:
|
|
- osu
|
|
- taiko
|
|
- catch
|
|
- mania
|
|
converts:
|
|
description: "Include converted beatmaps"
|
|
type: boolean
|
|
required: false
|
|
default: true
|
|
ranked-only:
|
|
description: "Only ranked beatmaps"
|
|
type: boolean
|
|
required: false
|
|
default: true
|
|
generators:
|
|
description: "Comma-separated list of generators (available: [sr, pp, score])"
|
|
type: string
|
|
required: false
|
|
default: 'pp,sr'
|
|
osu-a:
|
|
description: "The source build of ppy/osu"
|
|
type: string
|
|
required: false
|
|
default: 'latest'
|
|
difficulty-calculator-a:
|
|
description: "The source build of ppy/osu-difficulty-calculator"
|
|
type: string
|
|
required: false
|
|
default: 'latest'
|
|
difficulty-calculator-b:
|
|
description: "The target build of ppy/osu-difficulty-calculator"
|
|
type: string
|
|
required: false
|
|
default: 'latest'
|
|
score-processor-a:
|
|
description: "The source build of ppy/osu-queue-score-statistics"
|
|
type: string
|
|
required: false
|
|
default: 'latest'
|
|
score-processor-b:
|
|
description: "The target build of ppy/osu-queue-score-statistics"
|
|
type: string
|
|
required: false
|
|
default: 'latest'
|
|
|
|
permissions:
|
|
pull-requests: write
|
|
|
|
env:
|
|
EXECUTION_ID: execution-${{ github.run_id }}-${{ github.run_number }}-${{ github.run_attempt }}
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash -euo pipefail {0}
|
|
|
|
jobs:
|
|
check-permissions:
|
|
name: Check permissions
|
|
runs-on: ubuntu-latest
|
|
if: ${{ github.event_name == 'workflow_dispatch' || contains(github.event.comment.body, '!diffcalc') }}
|
|
steps:
|
|
- name: Check permissions
|
|
run: |
|
|
ALLOWED_USERS=(smoogipoo peppy bdach frenzibyte)
|
|
for i in "${ALLOWED_USERS[@]}"; do
|
|
if [[ "${{ github.actor }}" == "$i" ]]; then
|
|
exit 0
|
|
fi
|
|
done
|
|
exit 1
|
|
|
|
run-diffcalc:
|
|
name: Run spreadsheet generator
|
|
needs: check-permissions
|
|
uses: ./.github/workflows/_diffcalc_processor.yml
|
|
with:
|
|
# Can't reference env... Why GitHub, WHY?
|
|
id: execution-${{ github.run_id }}-${{ github.run_number }}-${{ github.run_attempt }}
|
|
head-sha: https://github.com/${{ github.repository }}/commit/${{ github.event.pull_request.head.sha || github.sha }}
|
|
pr-url: ${{ github.event.issue.pull_request.html_url || '' }}
|
|
pr-text: ${{ github.event.comment.body || '' }}
|
|
dispatch-inputs: ${{ (github.event.type == 'workflow_dispatch' && toJSON(inputs)) || '' }}
|
|
secrets:
|
|
DIFFCALC_GOOGLE_CREDENTIALS: ${{ secrets.DIFFCALC_GOOGLE_CREDENTIALS }}
|
|
|
|
create-comment:
|
|
name: Create PR comment
|
|
needs: check-permissions
|
|
runs-on: ubuntu-latest
|
|
if: ${{ github.event_name == 'issue_comment' && github.event.issue.pull_request }}
|
|
steps:
|
|
- name: Create comment
|
|
uses: thollander/actions-comment-pull-request@fabd468d3a1a0b97feee5f6b9e499eab0dd903f6 # v2.5.0
|
|
with:
|
|
comment_tag: ${{ env.EXECUTION_ID }}
|
|
message: |
|
|
Difficulty calculation queued -- please wait! (${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})
|
|
|
|
*This comment will update on completion*
|
|
|
|
output-cli:
|
|
name: Info
|
|
needs: run-diffcalc
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Output info
|
|
run: |
|
|
echo "Target: ${{ needs.run-diffcalc.outputs.target }}"
|
|
echo "Spreadsheet: ${{ needs.run-diffcalc.outputs.sheet }}"
|
|
|
|
update-comment:
|
|
name: Update PR comment
|
|
needs: [ create-comment, run-diffcalc ]
|
|
runs-on: ubuntu-latest
|
|
if: ${{ always() && needs.create-comment.result == 'success' }}
|
|
steps:
|
|
- name: Update comment on success
|
|
if: ${{ needs.run-diffcalc.result == 'success' }}
|
|
uses: thollander/actions-comment-pull-request@fabd468d3a1a0b97feee5f6b9e499eab0dd903f6 # v2.5.0
|
|
with:
|
|
comment_tag: ${{ env.EXECUTION_ID }}
|
|
mode: recreate
|
|
message: |
|
|
Target: ${{ needs.run-diffcalc.outputs.target }}
|
|
Spreadsheet: ${{ needs.run-diffcalc.outputs.sheet }}
|
|
|
|
- name: Update comment on failure
|
|
if: ${{ needs.run-diffcalc.result == 'failure' }}
|
|
uses: thollander/actions-comment-pull-request@fabd468d3a1a0b97feee5f6b9e499eab0dd903f6 # v2.5.0
|
|
with:
|
|
comment_tag: ${{ env.EXECUTION_ID }}
|
|
mode: recreate
|
|
message: |
|
|
Difficulty calculation failed: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
|
|
|
|
- name: Update comment on cancellation
|
|
if: ${{ needs.run-diffcalc.result == 'cancelled' }}
|
|
uses: thollander/actions-comment-pull-request@fabd468d3a1a0b97feee5f6b9e499eab0dd903f6 # v2.5.0
|
|
with:
|
|
comment_tag: ${{ env.EXECUTION_ID }}
|
|
mode: delete
|
|
message: '.' # Appears to be required by this action for non-error status code.
|