Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion .github/workflows/ui-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.9'
python-version: '3.11'

- name: Install system dependencies
run: |
Expand Down Expand Up @@ -122,6 +122,7 @@ jobs:
COMPOSE_DOCKER_CLI_BUILD: 1

- name: Wait for services to be ready
id: wait
run: |
echo "Waiting for WEKO services to start..."
start_time=$(date +%s)
Expand Down Expand Up @@ -175,6 +176,16 @@ jobs:
WEKO_TEST_EMAIL: wekosoftware@nii.ac.jp
WEKO_TEST_PASSWORD: uspass123

# install.sh が scripts/demo/item_type.sql から投入した JSON-LD マッピングを、
# 同じく投入されたアイテムタイプに対して検証する。
# UIテストの成否に関わらず、WEKO が起動していれば実行する。
- name: Validate JSON-LD mappings
if: ${{ !cancelled() && steps.wait.outcome == 'success' }}
shell: bash
run: |
docker compose exec -T web python /code/scripts/ci/validate_jsonld_mappings.py \
| tee -a "$GITHUB_STEP_SUMMARY"

- name: Upload test results
uses: actions/upload-artifact@v4
if: always()
Expand Down
39 changes: 39 additions & 0 deletions scripts/ci/validate_jsonld_mappings.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
"""install.sh が投入した JSON-LD マッピングを、紐づくアイテムタイプに対して検証する。

マッピングとアイテムタイプはどちらも scripts/demo/item_type.sql から投入されるので、
ここでの不一致は item_type.sql 自体の不整合を意味する。

web コンテナ内で実行し、結果を Markdown で出力する:

docker compose exec -T web python /code/scripts/ci/validate_jsonld_mappings.py

不一致が1件でもあれば終了コード 1 で終わる。
"""
import sys

from invenio_app.factory import create_app


def main():
from weko_records.models import ItemTypeJsonldMapping
from weko_search_ui.mapper import JsonLdMapper

lines = ['# JSON-LD マッピングの検証', '',
'| マッピング | アイテムタイプ | エラー数 |', '| --- | --- | ---: |']
details = []
with create_app().app_context():
mappings = ItemTypeJsonldMapping.query.filter_by(is_deleted=False) \
.order_by(ItemTypeJsonldMapping.id).all()
for m in mappings:
errors = JsonLdMapper(m.item_type_id, m.mapping).validate() or []
lines.append(f'| {m.id} {m.name} | {m.item_type_id} | {len(errors)} |')
if errors:
details += [f'## {m.id} {m.name}', '']
details += [f'- {e}' for e in errors]
details.append('')
print('\n'.join(lines + [''] + details))
return 1 if details else 0


if __name__ == '__main__':
sys.exit(main())
Loading
Loading