Feature/components table #801
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Plugin Testing | |
| on: | |
| pull_request: | |
| branches: | |
| - main | |
| - '[0-9]+.[0-9]+' | |
| paths: # run this action only when the plugins folder is changed | |
| - 'plugins/**' | |
| concurrency: | |
| group: ${{ github.ref }}-plugin | |
| cancel-in-progress: true | |
| jobs: | |
| plugin_update_check: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Get changed files for plugins | |
| id: changed-files-specific | |
| uses: tj-actions/[email protected] | |
| - name: Filter changed plugins and set output | |
| id: set-matrix | |
| run: | | |
| IFS=$'\n' | |
| changed_files=(${{ steps.changed-files-specific.outputs.all_changed_files }}) | |
| declare -A plugin_set | |
| for file in "${changed_files[@]}"; do | |
| if [[ "$file" =~ ^plugins/ && ! "$file" =~ ^plugins/template/ ]]; then | |
| plugin_name=$(echo "$file" | cut -d '/' -f 2) | |
| # Check if the plugin has a pyproject.toml file | |
| if [[ -f "plugins/$plugin_name/pyproject.toml" ]]; then | |
| plugin_set[$plugin_name]=1 | |
| fi | |
| fi | |
| done | |
| plugins=("${!plugin_set[@]}") | |
| matrix_json=$(printf '%s\n' "${plugins[@]}" | jq -R -s -c '{plugin: split("\n")[:-1]}') | |
| echo "matrix_json=$matrix_json" | |
| echo "Changed plugins: ${plugins[*]}" | |
| echo "matrix=$matrix_json" >> $GITHUB_OUTPUT | |
| echo "matrix_json: $matrix_json" | |
| outputs: | |
| matrix: ${{ steps.set-matrix.outputs.matrix }} | |
| test_plugin: | |
| needs: plugin_update_check | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: ${{fromJson(needs.plugin_update_check.outputs.matrix)}} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Cache Pip Packages | |
| id: setup-python | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.10' | |
| cache: 'pip' # caching pip dependencies | |
| - name: Cache Python Installation | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ env.pythonLocation }} # Cache the whole python installation dir. | |
| key: ${{ matrix.plugin }}_${{ hashFiles('pyproject.toml', 'plugins/${{ matrix.plugin }}/pyproject.toml') }} | |
| - name: Install SuperDuperDB Project | |
| run: | | |
| # Install core and testsuite dependencies on the cached python environment. | |
| python -m pip install '.[test]' | |
| - name: Lint and type-check | |
| run: | | |
| make lint-and-type-check DIRECTORIES="plugins/${{ matrix.plugin }}" | |
| - name: Install Plugin | |
| run: | | |
| echo "Installing local plugin dependencies..." | |
| grep -o '#\s*:CI:\s*plugins/.*' plugins/${{ matrix.plugin }}/pyproject.toml | while read line; do | |
| dep_path=${line##*# :CI: } | |
| dep_path=${dep_path%%[[:space:]]*} | |
| echo "Installing $dep_path for testing..." | |
| python -m pip install "$dep_path[test]" | |
| done | |
| echo "Installing plugin..." | |
| python -m pip install "plugins/${{ matrix.plugin }}[test]" | |
| - name: Plugin Testing | |
| run: | | |
| export PYTHONPATH=./ | |
| if [ "${{ matrix.plugin }}" = "sql" ]; then | |
| sqlite3 test.db "create table t(f int); drop table t;" | |
| fi | |
| if [ -d "plugins/${{ matrix.plugin }}/plugin_test" ]; then | |
| pytest --cov=superduper --cov-report=xml plugins/${{ matrix.plugin }}/plugin_test | |
| else | |
| echo "Skipping tests for ${{ matrix.plugin }}, no test file found." | |
| fi | |
| - name: Optionally run the base testing | |
| run: | | |
| if [ "${{ matrix.plugin }}" = "sql" ]; then | |
| sqlite3 test.db "create table t(f int); drop table t;" | |
| fi | |
| SUPERDUPER_CONFIG="plugins/${{ matrix.plugin }}/plugin_test/config.yaml" | |
| if [ -f "$SUPERDUPER_CONFIG" ]; then | |
| echo "Running the base testing..." | |
| make unit_testing SUPERDUPER_CONFIG=$SUPERDUPER_CONFIG | |
| make usecase_testing SUPERDUPER_CONFIG=$SUPERDUPER_CONFIG | |
| else | |
| echo "No config file found, skipping..." | |
| fi |