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 }}