--- a +++ b/.github/workflows/validator.yml @@ -0,0 +1,105 @@ + +name: Dataset Validator +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + Validate: + runs-on: ubuntu-latest + + steps: + + - name: Checkout + uses: actions/checkout@v2 + with: + # make sure to download directly from the PR's repo, whether that is this repo or a fork + # By default github generates a merge commit for each PR in this repo, but only for the one branch under test + # but `git-annex` needs access to *two* branches: the current branch and `git-annex` + # this might be subtly buggy since it is testing the remote version, not the merged version + # + # *if* this is not a pull request, this will fall back to its default behaviour. + repository: ${{github.event.pull_request.head.repo.full_name}} + ref: ${{ github.event.pull_request.head.ref }} + + - name: Install dos2unix + run: | + # the easy way to do this: convert everything to unix and ask git if that changed anything + sudo apt-get install -y dos2unix + + - name: Check line endings + run: | + # the easy way to do this: convert everything to unix and ask git if that changed anything + + find ./ -path ./.git -prune -o -type f -print0 | xargs -0 dos2unix -q + # this version is safer, but more maintenance: + #find ./ -path ./.git -prune -o -type f \( ! -name "*.nii" -a ! -name "*.nii.gz" \) -print0 | xargs -0 dos2unix -q + + git diff --stat --exit-code + if [ "$?" -ne 0 ]; then + echo "error: Windows line endings found." + exit 1 + fi + + - name: Lint participants.tsv + run: .github/workflows/lint-tsv participants.tsv + + #- name: Update software + # run: | + # # do we want to do this? it's helpful to avoid testing against surprise out-of-date software, but also so slow. + # sudo apt-get update && + # sudo DEBIAN_FRONTEND=noninteractive apt-get -y dist-upgrade && + # sudo DEBIAN_FRONTEND=noninteractive apt-get autoremove + + - name: Install git-annex + run: | + sudo apt-get install -y git-annex + git config --global annex.thin true + + - name: Install bids-validator + run: | + # install proper NodeJS for bids-validator + curl -sL https://deb.nodesource.com/setup_current.x | sudo -E bash - + sudo apt-get install -y nodejs + sudo npm install -g bids-validator + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: 3.7 + + - name: Install spine-generic for acquisition parameters check + run: pip install spinegeneric@git+https://github.com/spine-generic/spine-generic.git@master + + #- name: Increase free space + # run: | + # # this takes about 2 minutes but saves about 30GB, which is space we might need for git-annex. + # # annex.thin saves a lot of space, but if the dataset grows beyond what Github can handle + # # try enabling this. + # # ref: https://github.com/actions/virtual-environments/issues/2606#issuecomment-772683150 + # sudo rm -rf /usr/local/lib/android /usr/share/dotnet + + - name: git config + run: | + # this is needed by git-annex so that it can write to the local git-annex branch + # the tracking information about the local copy + git config --global user.name "gh-actions" + git config --global user.email "gh-actions" + # but actually, disable those writes. We don't need them because we're throwing away this copy immediately. + # this might make the previous two lines unnecessary, but it's safer just to leave them both in + git config annex.alwayscommit false + + - name: Download dataset + run: | + git fetch --depth=1 origin git-annex:git-annex # actions/checkout@v2 does a shallow checkout, so it is missing this important branch + git annex init + git annex get -J8 + + - name: Checking BIDS compliance + run: bids-validator --verbose ./ + - name: Checking acquisition parameters + run: sg_params_checker -path-in ./ + - name: Checking data consistency + run: sg_check_data_consistency -path-in ./