2727 runs-on : ubuntu-latest
2828 outputs :
2929 matrix : ${{ steps.set-matrix.outputs.matrix }}
30- bids_pr : ${{ steps.find-pr.outputs.pr_number }}
30+ spec_pr : ${{ steps.find-pr.outputs.spec_pr }}
31+ val_pr : ${{ steps.find-pr.outputs.val_pr }}
3132 steps :
3233 - uses : actions/checkout@v5
3334 with :
@@ -41,15 +42,17 @@ jobs:
4142 cat << 'EOF' > /tmp/pr_body.txt
4243 ${{ github.event.pull_request.body }}
4344 EOF
44- SPEC_PR_NUM=$(grep -oP 'BIDS Specification PR:\s*(https://github\.com/bids-standard/bids-specification/pulls?/|bids-standard/bids-specification#)*\K[0-9]+' /tmp/pr_body.txt | head -1 || true)
45- [ -n "$SPEC_PR_NUM" ] && echo "spec_pr_number=$SPEC_PR_NUM" >> $GITHUB_OUTPUT || :
45+ SPEC_PR=$(grep -oP 'BIDS Specification PR:\s*(https://github\.com/bids-standard/bids-specification/pulls?/|bids-standard/bids-specification#)*\K[0-9]+' /tmp/pr_body.txt | head -1 || true)
46+ [ -n "$SPEC_PR" ] && echo "spec_pr=$SPEC_PR" >> $GITHUB_OUTPUT || :
47+ VAL_PR=$(grep -oP 'BIDS Validator PR:\s*(https://github\.com/bids-standard/bids-validator/pulls?/|bids-standard/bids-specification#)*\K[0-9]+' /tmp/pr_body.txt | head -1 || true)
48+ [ -n "$VAL_PR" ] && echo "val_pr=$VAL_PR" >> $GITHUB_OUTPUT || :
4649 fi
4750
4851 - name : Set matrix
4952 id : set-matrix
5053 run : |
5154 EXTRA_ITEM=''
52- if [ -n "${{ steps.find-pr.outputs.spec_pr_number }}" ]; then
55+ if [ -n "${{ steps.find-pr.outputs.spec_pr }}${{ steps.find-pr.outputs.val_pr }}" ]; then
5356 EXTRA_ITEM=', "bids-prs"'
5457 fi
5558 echo "matrix=[\"stable\", \"main\", \"dev\", \"legacy\"${EXTRA_ITEM}]" >> $GITHUB_OUTPUT
6568 runs-on : ${{ matrix.platform }}
6669
6770 env :
68- BIDS_PR : ${{ needs.prepare-matrix.outputs.bids_pr }}
71+ SPEC_PR : ${{ needs.prepare-matrix.outputs.spec_pr }}
72+ VAL_PR : ${{ needs.prepare-matrix.outputs.val_pr }}
6973 TZ : Europe/Berlin
7074 FORCE_COLOR : 1
7175
@@ -101,7 +105,7 @@ jobs:
101105 deno install -Agf -n bids-validator jsr:@bids/validator
102106
103107 - name : Install BIDS validator (main)
104- if : matrix.bids-validator == 'main' || matrix.bids-validator == 'bids-prs'
108+ if : matrix.bids-validator == 'main'
105109 run : |
106110 # If unmerged validator PRs are needed for testing, you can use
107111 # https://github.com/<FORK>/bids-validator/raw/<BRANCH>/bids-validator/src/bids-validator.ts
@@ -119,6 +123,17 @@ jobs:
119123 run : |
120124 npm install -g bids-validator
121125
126+ - name : Install BIDS validator (PR)
127+ if : matrix.bids-validator == 'bids-prs' && env.VAL_PR != ''
128+ shell : bash
129+ run : |
130+ # First fetch PR info (fork URL and branch)
131+ mapfile -t pr_info < <(curl -s https://api.github.com/repos/bids-standard/bids-validator/pulls/$VAL_PR | jq -r '.head.repo.html_url, .head.ref')
132+ # Perform the same installation as in "dev"
133+ git clone -b ${pr_info[1]} ${pr_info[0]} ../bids-validator
134+ cd ../bids-validator
135+ deno compile -A -o $HOME/.deno/bin/bids-validator src/bids-validator.ts
136+
122137 - name : Display versions and environment information
123138 run : |
124139 echo $TZ
@@ -167,11 +182,11 @@ jobs:
167182 run : echo BIDS_SCHEMA=https://bids-specification.readthedocs.io/en/latest/schema.json >> $GITHUB_ENV
168183
169184 - name : Set BIDS_SCHEMA variable for bids-prs version
170- if : matrix.bids-validator == 'bids-prs'
185+ if : matrix.bids-validator == 'bids-prs' && env.SPEC_PR != ''
171186 # Use the readthedocs PR preview build for the schema
172187 run : |
173- echo "Using schema from bids-specification PR #${{ env.BIDS_PR }}"
174- echo BIDS_SCHEMA=https://bids-specification--${{ env.BIDS_PR }}.org.readthedocs.build/en/${{ env.BIDS_PR }}/schema.json >> $GITHUB_ENV
188+ echo "Using schema from bids-specification PR #${{ env.SPEC_PR }}"
189+ echo BIDS_SCHEMA=https://bids-specification--${{ env.SPEC_PR }}.org.readthedocs.build/en/${{ env.SPEC_PR }}/schema.json >> $GITHUB_ENV
175190
176191 - name : Validate all BIDS datasets using bids-validator
177192 run : |
0 commit comments