Rime と組み合わせて使う

statements-manager は、問題作成支援ツール Rime と組み合わせて使うことを想定した作りになっています。statements-manager は問題文の準備作業を補助し、Rime は問題文作成を除くすべての工程の準備作業を補助するツールです。

このため、想定しているディレクトリ構成も Rime と似ています。設定ファイル類は以下のように配置することを推奨しています。

  • 問題セットに関する設定を行うファイル problemset.toml は、Rime のプロジェクト設定ファイル PROJECT と同じ階層に置く

  • 各問題に関する設定を行うファイル problem.toml は、Rime の問題設定ファイル PROBLEM と同じ階層に置く

  • 制約ファイルの出力先 params_path は、Rime で入力生成器・入力検証器を配置するディレクトリ tests と同じ階層のパスにする

また、組み合わせて使う際に推奨している実行順は以下のとおりです。

# create constraints files
$ ss-manager run -c WORKING_DIR

# create correct sample outputs
$ rime clean WORKING_DIR
$ rime test WORKING_DIR

# create problem statements
$ ss-manager run WORKING_DIR

statements-manager によって、問題文の出力ファイルと制約ファイルを更新します。その後、その制約ファイルを使って Rime でデータセットを生成し、用意された解法が正しく動作するかどうかをチェックします。この順番で操作することで、問題文とデータセットの制約のズレを減らすことができます。

リポジトリにある問題文を半自動で更新する

GitHub Actions などの CI サービスと併用することで、リポジトリに変更が加えられたときに問題文に関する成果物の差分を push し、常にリポジトリ内の問題文を最新の状態に保つことが可能です。

設定の一例を以下に示します。これは master ブランチに push された際に ss-manager run を実行し、差分を自動で push するものです。以下の実装を、リポジトリに .github/workflows/statements-manager.yml として保存すると動作するはずです。

 1# run statements-manager and commit/push diffs
 2name: update-statements
 3
 4on:
 5push:
 6    branches: [master]
 7
 8jobs:
 9build:
10    runs-on: ubuntu-latest
11    steps:
12    - uses: actions/checkout@v2
13    - name: Set up Python 3
14        uses: actions/setup-python@v2
15        with:
16        python-version: 3.8
17    - name: Install dependencies
18        run: |
19        python -m pip install --upgrade pip
20        pip install statements-manager
21    - name: Run statements-manager
22        run: |
23        ss-manager run ./
24    - name: Commit files
25        run: |
26        git add --all
27        git config --local user.email "github-actions[bot]@users.noreply.github.com"
28        git config --local user.name "github-actions[bot]"
29        git commit -m "[ci skip] [bot] Updating to ${{ github.sha }}."
30    - name: Push changes
31        uses: ad-m/github-push-action@master
32        with:
33        branch: ${{ github.ref }}