name: Release on: push: tags: - 'v*' jobs: release: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install dependencies run: | sudo apt-get update sudo apt-get install -y --no-install-recommends \ build-essential gcc make cppcheck lcov \ python3 python3-pip ca-certificates \ doxygen graphviz \ jq curl - name: Tag from ref run: echo "TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV - name: Build + Tests + Coverage + Test-Report run: | make test make coverage make test-report - name: Traceability + Diagramme + API-Doc + Landing-Page run: | python3 tools/traceability.py publish docs/traceability python3 tools/render_plantuml.py make docs make landing-page - name: Cppcheck-Report (XML) run: | mkdir -p build cppcheck --enable=all --inconclusive --xml --xml-version=2 \ -I src src 2> build/cppcheck-report.xml || true - name: Release-Bundle paketieren run: | BUNDLE="release/demo-epb-${TAG}" mkdir -p "$BUNDLE"/{coverage,traceability,diagrams,api-doc,reports,docs,src,tests} # Landing-Page (Startseite) im Bundle-Root cp build/index.html "$BUNDLE/index.html" # CI-generierte Artefakte cp -r build/coverage-html/* "$BUNDLE/coverage/" 2>/dev/null || true cp -r docs/traceability/* "$BUNDLE/traceability/" cp -r docs/diagrams/* "$BUNDLE/diagrams/" cp -r build/api-doc/html/* "$BUNDLE/api-doc/" 2>/dev/null || true cp build/cppcheck-report.xml "$BUNDLE/reports/" 2>/dev/null || true cp build/test-report.html "$BUNDLE/reports/" 2>/dev/null || true cp build/test-report.md "$BUNDLE/reports/" 2>/dev/null || true # Source-Code zum Anklicken aus dem Bundle (begrenzt auf das wichtigste) cp -r src/*.c src/*.h "$BUNDLE/src/" 2>/dev/null || true cp -r src/stubs "$BUNDLE/src/" 2>/dev/null || true # Alle Word-Dokumente (Plaene, Safety, Manuals, Audit-Artefakte) mkdir -p "$BUNDLE/docs/plaene" "$BUNDLE/docs/safety" "$BUNDLE/docs/manuals" \ "$BUNDLE/docs/reviews" "$BUNDLE/docs/non-conformities" "$BUNDLE/docs/misra" cp docs/*.docx "$BUNDLE/docs/plaene/" 2>/dev/null || true cp -r docs/safety/* "$BUNDLE/docs/safety/" 2>/dev/null || true cp -r docs/manuals/* "$BUNDLE/docs/manuals/" 2>/dev/null || true cp -r docs/reviews/* "$BUNDLE/docs/reviews/" 2>/dev/null || true cp -r docs/non-conformities/* "$BUNDLE/docs/non-conformities/" 2>/dev/null || true cp -r misra/records/* "$BUNDLE/docs/misra/" 2>/dev/null || true # Source archive git archive --format=tar.gz \ --prefix="demo-epb-${TAG}/" \ HEAD -o "release/demo-epb-${TAG}-source.tar.gz" # Artefakt-Archiv (Engineering + Docs zusammen) tar -czf "release/demo-epb-${TAG}-artifacts.tar.gz" -C release "demo-epb-${TAG}" ls -la release/ - name: Release-Notes generieren run: | cat > release/RELEASE_NOTES.md <