name: Test Suite Evaluation on: pull_request: branches: [develop] # TODO: run this task only on PR in production; use push event for testing #push: #branches: # - '**' # globals env: # general settings MAIN_REPO_OWNER: rism-digital # Main repo owner (default: rism-digital; should not be changed) # build artifacts TOOLKIT_BUILD: toolkit-build # gh-pages GH_PAGES_REPO: ${{ github.repository_owner }}/verovio.org # works from rism-digital and from forks GH_PAGES_BRANCH: gh-pages # directories GH_PAGES_DIR: gh-pages-dir PR_DIR: pr-${{ github.event.pull_request.head.sha }} DEV_DIR: dev-dir TEMP_DIR: temp-dir jobs: ################################################### # Build the Python toolkit and run the test suite # ################################################### build_python: name: Build the test suite runs-on: ubuntu-24.04 steps: - uses: FranzDiebold/github-env-vars-action@v2.9.0 - name: Get Short SHA run: | echo "SHORT_SHA=`echo ${{ github.event.pull_request.head.sha }} | cut -c1-7`" >> $GITHUB_ENV - name: Add additional environment variables for creating URL slugs run: | echo "OUTPUT_DIR=${{ github.event.pull_request.number }}/${{ env.SHORT_SHA }}" >> $GITHUB_ENV - uses: actions/setup-python@v6 with: python-version: "3.12" - name: Checkout GH_PAGES_BRANCH into GH_PAGES_DIR uses: actions/checkout@v7.0.0 with: repository: ${{ env.GH_PAGES_REPO }} ref: ${{ env.GH_PAGES_BRANCH }} path: ${{ env.GH_PAGES_DIR }} submodules: recursive - name: Create directories and install packages working-directory: ${{ github.workspace }} run: | mkdir -p ${{ env.DEV_DIR }} mkdir -p ${{ env.PR_DIR }} mkdir -p ${{ env.TEMP_DIR }}/${{ env.DEV_DIR }} mkdir -p ${{ env.TEMP_DIR }}/${{ env.PR_DIR }} mkdir -p ${{ env.OUTPUT_DIR }} ls -alh ls -alh ${{ env.OUTPUT_DIR }} sudo apt-get install wireguard sudo echo "${{ secrets.VPN_CONFIGURATION }}" > wg0.conf python3 -m venv .venv-dev python3 -m venv .venv-pr .venv-dev/bin/python -m pip install --upgrade pip .venv-pr/bin/python -m pip install --upgrade pip .venv-dev/bin/python -m pip install build diffimg jsondiff lxml xmldiff cairosvg py_midicsv .venv-pr/bin/python -m pip install build diffimg jsondiff lxml xmldiff cairosvg py_midicsv - name: Checkout the dev branch uses: actions/checkout@v7.0.0 with: ref: develop path: ${{ env.DEV_DIR }}/ - name: Install the Leipzig font working-directory: ${{ github.workspace }}/${{ env.DEV_DIR }}/ run: | sudo cp ./fonts/Leipzig/Leipzig.ttf /usr/local/share/fonts sudo fc-cache -f -v - name: Build Python toolkit and run the tests for the dev branch working-directory: ${{ github.workspace }}/${{ env.DEV_DIR }} run: | ${{ github.workspace }}/.venv-dev/bin/python -m build --wheel ${{ github.workspace }}/.venv-dev/bin/python -m pip install dist/*.whl ${{ github.workspace }}/.venv-dev/bin/python doc/test-suite.py ${{ github.workspace }}/${{env.GH_PAGES_DIR}}/_tests ${{ github.workspace }}/${{ env.TEMP_DIR }}/${{ env.DEV_DIR }}/ ${{ github.workspace }}/.venv-dev/bin/python doc/test-suite.py ${{ github.workspace }}/${{env.GH_PAGES_DIR}}/musicxmlTestSuite ${{ github.workspace }}/${{ env.TEMP_DIR }}/${{ env.DEV_DIR }}/ - name: Checkout the PR uses: actions/checkout@v7.0.0 with: ref: ${{ github.event.pull_request.head.sha }} path: ${{ env.PR_DIR }}/ - name: Build Python toolkit and run the tests for the PR working-directory: ${{ github.workspace }}/${{ env.PR_DIR }} run: | ${{ github.workspace }}/.venv-pr/bin/python -m build --wheel ${{ github.workspace }}/.venv-pr/bin/python -m pip install dist/*.whl ${{ github.workspace }}/.venv-pr/bin/python doc/test-suite.py ${{ github.workspace }}/${{env.GH_PAGES_DIR}}/_tests ${{ github.workspace }}/${{ env.TEMP_DIR }}/${{ env.PR_DIR }}/ ${{ github.workspace }}/.venv-pr/bin/python doc/test-suite.py ${{ github.workspace }}/${{env.GH_PAGES_DIR}}/musicxmlTestSuite ${{ github.workspace }}/${{ env.TEMP_DIR }}/${{ env.PR_DIR }}/ - name: Compare the tests working-directory: ${{ github.workspace }}/${{ env.DEV_DIR }}/doc run: | ${{ github.workspace }}/.venv-dev/bin/python ./test-suite-diff.py ${{ github.workspace }}/${{ env.TEMP_DIR }}/${{ env.PR_DIR }}/ ${{ github.workspace }}/${{ env.TEMP_DIR }}/${{ env.DEV_DIR }}/ ${{ github.workspace }}/${{ env.OUTPUT_DIR }}/ ls -al - name: Round-trip evaluation working-directory: ${{ github.workspace }}/${{ env.PR_DIR }} run: | ${{ github.workspace }}/.venv-pr/bin/python doc/test-suite-roundtrip.py ${{ github.workspace }}/${{env.GH_PAGES_DIR}}/_tests ${{ github.workspace }}/${{ env.OUTPUT_DIR }}/ ls -al - name: Upload results as artefacts uses: actions/upload-artifact@v7 with: name: test-suite-diff path: ${{ github.workspace }}/${{ env.OUTPUT_DIR }}/ - name: Check existence of the log*.md files id: check_files uses: andstor/file-existence-action@v3 with: files: "${{ github.workspace }}/${{ env.OUTPUT_DIR }}/log*.md" - name: Show the list of changes detected if: steps.check_files.outputs.files_exists == 'true' run: | if [ -e ${{ github.workspace }}/${{ env.OUTPUT_DIR }}/log.md ] then echo "This is the list of tests for which a PNG change has been detected:" cat ${{ github.workspace }}/${{ env.OUTPUT_DIR }}/log.md fi if [ -e ${{ github.workspace }}/${{ env.OUTPUT_DIR }}/log_midi.md ] then echo "This is the list of tests for which a MIDI change has been detected:" cat ${{ github.workspace }}/${{ env.OUTPUT_DIR }}/log_midi.md fi