1+ name : ' Run KNIME Workflow Test'
2+
3+ on :
4+ workflow_dispatch :
5+ inputs :
6+ run_build :
7+ description : ' Run build job'
8+ required : false
9+ default : ' true'
10+ pull_request :
11+ types : [opened, synchronize, reopened]
12+ push :
13+ branches : [ master ]
14+
15+ jobs :
16+ build :
17+ name : Bundle extension and build image
18+ runs-on : ubuntu-latest
19+ if : ${{ github.event_name != 'workflow_dispatch' || github.event.inputs.run_build == 'true' }}
20+ env :
21+ LOCAL_UPDATE_SITE_DIR : local-update-site
22+ steps :
23+ - name : Checkout repository
24+ uses : actions/checkout@v4
25+
26+ - name : Setup Pixi
27+ uses : prefix-dev/setup-pixi@v0
28+
29+ - name : Install environment
30+ run : pixi install
31+
32+ - name : Build local update site
33+ run : pixi run build
34+
35+ - name : Upload update site artifact
36+ uses : actions/upload-artifact@v4
37+ with :
38+ name : extensionartifacts-for-update-site-${{ github.run_id }}
39+ path : ${{ env.LOCAL_UPDATE_SITE_DIR }}
40+
41+ - name : Compute KNIME feature group from knime.yml
42+ id : knime_meta
43+ shell : bash
44+ run : |
45+ pixi run -e build python - <<'PY'
46+ import os
47+ import yaml
48+ with open('knime.yml', 'r', encoding='utf-8') as f:
49+ y = yaml.safe_load(f)
50+ group_id = (y.get('group_id') or '').strip()
51+ name = (y.get('name') or '').strip()
52+ if not group_id or not name:
53+ raise SystemExit(f"Failed to parse group_id/name from knime.yml (group_id={group_id}, name={name})")
54+ feature_group_id = f"{group_id}.features.{name}.feature.group"
55+ with open(os.environ['GITHUB_OUTPUT'], 'a', encoding='utf-8') as gh:
56+ print(f"feature_group_id={feature_group_id}", file=gh)
57+ print("Computed feature group:", feature_group_id)
58+ PY
59+
60+ - name : Build KNIME image with local update site
61+ run : |
62+ docker build \
63+ -f .github/workflows/Dockerfile \
64+ --build-arg LOCAL_UPDATE_SITE_SRC="${{ env.LOCAL_UPDATE_SITE_DIR }}" \
65+ --build-arg KNIME_FEATURES_ARG="${{ steps.knime_meta.outputs.feature_group_id }}" \
66+ -t knime-executor-with-extension:ci .
67+
68+ - name : Analyze workflow execution results
69+ id : workflow_analysis
70+ run : |
71+ echo "Extracting workflow execution results..."
72+ ANALYSIS_OUTPUT=$(docker run --rm knime-executor-with-extension:ci /home/knime/analyze-workflow.sh)
73+ echo "$ANALYSIS_OUTPUT"
74+
75+ # Extract key metrics for badge
76+ EXECUTED_NODES=$(echo "$ANALYSIS_OUTPUT" | grep "Nodes executed:" | sed 's/.*: //')
77+ ERROR_COUNT=$(echo "$ANALYSIS_OUTPUT" | grep "Errors:" | sed 's/.*: //')
78+
79+ # Determine badge status
80+ if echo "$ANALYSIS_OUTPUT" | grep -q "SUCCESS"; then
81+ if [ "$ERROR_COUNT" = "0" ]; then
82+ BADGE_MESSAGE="workflow passed-${EXECUTED_NODES} nodes"
83+ BADGE_COLOR="brightgreen"
84+ else
85+ BADGE_MESSAGE="workflow passed-${EXECUTED_NODES} nodes, ${ERROR_COUNT} errors"
86+ BADGE_COLOR="yellow"
87+ fi
88+ else
89+ BADGE_MESSAGE="workflow failed"
90+ BADGE_COLOR="red"
91+ fi
92+
93+ echo "badge_message=$BADGE_MESSAGE" >> $GITHUB_OUTPUT
94+ echo "badge_color=$BADGE_COLOR" >> $GITHUB_OUTPUT
95+ echo "executed_nodes=$EXECUTED_NODES" >> $GITHUB_OUTPUT
96+ echo "error_count=$ERROR_COUNT" >> $GITHUB_OUTPUT
97+
98+ - name : Update workflow status badge
99+ if : github.ref == 'refs/heads/master'
100+ run : |
101+ # Create badge URL that you can use in README
102+ BADGE_URL="https://img.shields.io/badge/${{ steps.workflow_analysis.outputs.badge_message }}-${{ steps.workflow_analysis.outputs.badge_color }}"
103+ echo "Badge URL: $BADGE_URL"
104+ echo "You can use this in your README.md:"
105+ echo ""
0 commit comments