Skip to content

Commit

Permalink
Convert Azure Pipeline to Github Actions (#543)
Browse files Browse the repository at this point in the history
* add test python requirements

* migrate azure pipeline to github actions

* Fix test workflow syntax

- properly embed bash calls
- fix artifact reference name
- try to fix MATLAB test discovery

* attempt to fix python setup

* switch run-test to run-command

* try to upload to codecov

* Fix CI testing

Use version of MATLAB that supports hdf5 dynamically loaded filters.

* check ci env setting

* fix debug pipeline

* more env fixing

* fix expected error test id

* remove debug prints from ci

* add source files to download repo

* try different test suite

* try different test suite (again)

* Try using MATLAB R2024a for tests in workflow

* Give test workflow a shorter name

* Add codecov settings file

* Update versions of dependent actions to latest versions

* Update test badge in README.md

* Rename utilities folder to tools

* Add codespell workflow

---------

Co-authored-by: ehennestad <ehennestad@gmail.com>
Co-authored-by: Ben Dichter <ben.dichter@gmail.com>
  • Loading branch information
3 people authored Nov 2, 2024
1 parent 3be8111 commit 5cd6af6
Show file tree
Hide file tree
Showing 9 changed files with 162 additions and 50 deletions.
2 changes: 2 additions & 0 deletions +tests/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
pynwb
hdf5plugin
2 changes: 1 addition & 1 deletion .codespellrc
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[codespell]
skip = *.html,*logo_matnwb.svg,*fastsearch.m,*.yaml,*UpdateThirdPartyFromUpstream.sh,*testResults.xml
skip = *.html,*logo_matnwb.svg,*fastsearch.m,*.yaml,*testResults.xml
ignore-words-list = DNE,nd,whos
12 changes: 12 additions & 0 deletions .github/.codecov.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
coverage:
range: "90...100"
status:
project:
default:
target: 90 # Set the desired coverage target as 90%
threshold: 1 # Allowable drop in coverage
patch:
default:
# 75% of the changed code must be covered by tests
threshold: 25
only_pulls: true
File renamed without changes.
46 changes: 46 additions & 0 deletions .github/workflows/run_codespell.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Note: This workflow allows specifying a custom location for the Codespell
# configuration file by defining CONFIG_FILE as an environment variable.
# A defined subset of options is extracted from this file and passed to the
# Codespell action. This also ensures that the output of the codespell action
# prints out the values of these options.
# Todo: Generalize the extraction of codespell input arguments/options.

name: Codespell

on:
pull_request:
branches:
- master
push:
branches-ignore:
- master

jobs:
codespell:
name: Check for spelling errors
runs-on: ubuntu-latest
env:
CONFIG_FILE: .codespellrc

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Extract codespell configurations from configuration file
id: config
run: |
# Extract 'skip' value from the config file, excluding 'skip = ' part
skip=$(grep -E '^skip' "$CONFIG_FILE" | sed 's/^skip *= *//')
# Extract 'ignore-words-list' value from the config file, excluding 'ignore-words-list = ' part
ignore_words=$(grep -E '^ignore-words-list' "$CONFIG_FILE" | sed 's/^ignore-words-list *= *//')
# Export values as environment variables
echo "SKIP=$skip" >> $GITHUB_ENV
echo "IGNORE_WORDS_LIST=$ignore_words" >> $GITHUB_ENV
- name: Codespell
uses: codespell-project/actions-codespell@v2
with:
skip: "${{ env.SKIP }}"
ignore_words_list: "${{ env.IGNORE_WORDS_LIST }}"
82 changes: 82 additions & 0 deletions .github/workflows/run_tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# Run and publish MATLAB tests with coverage
name: Run tests

on:
pull_request:
branches:
- master
paths-ignore:
- "*.md"
- "*.codespellrc"
- ".github/**"
push:
branches:
- master

jobs:
run_tests:
name: Run MATLAB tests
runs-on: ubuntu-latest
steps:
- name: check out repository
uses: actions/checkout@v4
- name: install python
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: configure python env
run: |
python -m pip install -U pip
pip install -r +tests/requirements.txt
echo "HDF5_PLUGIN_PATH=$(python -c "import hdf5plugin; print(hdf5plugin.PLUGINS_PATH)")" >> "$GITHUB_ENV"
- name: install MATLAB
uses: matlab-actions/setup-matlab@v2
with:
release: R2024a # this is necessary to test dynamic filters
- name: run tests
uses: matlab-actions/run-command@v2
with:
command: results = assertSuccess(nwbtest); assert(~isempty(results), 'No tests ran');
- name: upload JUnit results
uses: actions/upload-artifact@v4
with:
name: test-results
path: testResults.xml
retention-days: 1
- name: upload coverage results
uses: actions/upload-artifact@v4
with:
name: test-coverage
path: ./coverage.xml
publish_junit:
name: Publish JUnit Test Results
runs-on: ubuntu-latest
if: ${{ always() }}
needs: [run_tests]
steps:
- name: retrieve result files
uses: actions/download-artifact@v4
with:
name: test-results
- name: publish results
uses: mikepenz/action-junit-report@v4
with:
report_paths: 'testResults.xml'
publish_coverage:
name: Publish Cobertura Test Coverage
runs-on: ubuntu-latest
needs: [run_tests]
steps:
- name: check out repository
uses: actions/checkout@v4
- name: retrieve code coverage files
uses: actions/download-artifact@v4
with:
name: test-coverage
- name: publish on Codecov
uses: codecov/codecov-action@v4
with:
token: ${{ secrets.CODECOV_TOKEN }}
files: coverage.xml
name: codecov-matnwb
verbose: true
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
![MatNWB Logo](logo/logo_matnwb_small.png)

[![Open in MATLAB Online](https://www.mathworks.com/images/responsive/global/open-in-matlab-online.svg)](https://matlab.mathworks.com/open/github/v1?repo=NeurodataWithoutBorders/matnwb&file=tutorials/basicUsage.mlx)
[![codecov](https://codecov.io/gh/NeurodataWithoutBorders/matnwb/branch/master/graph/badge.svg?token=apA7F24NsO)](https://codecov.io/gh/NeurodataWithoutBorders/matnwb) ![Azure DevOps tests](https://img.shields.io/azure-devops/tests/NeurodataWithoutBorders/matnwb/4)
[![codecov](https://codecov.io/gh/NeurodataWithoutBorders/matnwb/branch/master/graph/badge.svg?token=apA7F24NsO)](https://codecov.io/gh/NeurodataWithoutBorders/matnwb)
[![Run tests](https://github.com/NeurodataWithoutBorders/matnwb/actions/workflows/run_tests.yml/badge.svg)](https://github.com/NeurodataWithoutBorders/matnwb/actions/workflows/run_tests.yml?query=event%3Apush+branch%3Amaster)
[![Codespell](https://github.com/NeurodataWithoutBorders/matnwb/actions/workflows/run_codespell.yml/badge.svg?branch=master)](https://github.com/NeurodataWithoutBorders/matnwb/actions/workflows/run_codespell.yml?query=event%3Apush+branch%3Amaster)

MatNWB is a Matlab interface for reading and writing Neurodata Without Borders (NWB) 2.x files.

Expand Down
48 changes: 0 additions & 48 deletions azure-pipelines.yml

This file was deleted.

16 changes: 16 additions & 0 deletions tools/maintenance/validateCodecovSettings.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
function validateCodecovSettings()
% validateCodecovSettings Validate a codecov settings file.
%
% Note: This is a utility function developer's can use to check the
% codecov settings file in .github/.codecov.yaml

sysCommand = sprintf("curl -X POST --data-binary @%s https://codecov.io/validate", ...
fullfile(misc.getMatnwbDir, '.github', '.codecov.yaml'));

[status, message] = system(sysCommand);

assert(status == 0, 'Curl command failed')

assert(contains(message, 'Valid!'), ...
'Codecov settings file is invalid')
end

0 comments on commit 5cd6af6

Please sign in to comment.