Merge pull request #190 from modeldrivendevopsai/favicon #193
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: MDDOAI CI/CD | |
| on: | |
| push: | |
| branches: ["**"] | |
| tags: ["*"] | |
| pull_request: | |
| workflow_call: | |
| inputs: | |
| version: | |
| description: 'Explicit version to use (passed by the Release workflow)' | |
| required: false | |
| type: string | |
| env: | |
| IMAGE_NAME: ghcr.io/${{ github.repository }}/mddoai | |
| jobs: | |
| determine_version: | |
| name: Determine Version | |
| runs-on: ubuntu-latest | |
| outputs: | |
| image_tag: ${{ steps.tag.outputs.IMAGE_TAG }} | |
| version: ${{ steps.tag.outputs.VERSION }} | |
| steps: | |
| - name: Calculate image tag | |
| id: tag | |
| run: | | |
| if [ -n "${{ inputs.version }}" ]; then | |
| VERSION="${{ inputs.version }}" | |
| elif [ "${{ github.ref_type }}" = "tag" ]; then | |
| VERSION="${{ github.ref_name }}" | |
| elif [ "${{ github.ref }}" = "refs/heads/main" ]; then | |
| VERSION="1.0-snapshot" | |
| else | |
| VERSION="1.x-snapshot" | |
| fi | |
| IMAGE_TAG="${{ env.IMAGE_NAME }}:${VERSION}" | |
| echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT | |
| echo "IMAGE_TAG=${IMAGE_TAG}" >> $GITHUB_OUTPUT | |
| gradle_build: | |
| name: Gradle Build | |
| runs-on: ubuntu-latest | |
| container: gradle:8.14.3-jdk21-alpine | |
| defaults: | |
| run: | |
| working-directory: main | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Clean Gradle cache and daemon | |
| run: | | |
| rm -rf ~/.gradle/daemon ~/.gradle/caches | |
| ./gradlew --stop || true | |
| - name: Build and install distribution | |
| run: | | |
| chmod +x ./gradlew | |
| ./gradlew clean build -x test installDist | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: gradle-build | |
| path: main/build/ | |
| docker_build: | |
| name: Docker Build | |
| runs-on: ubuntu-latest | |
| needs: [gradle_build, determine_version] | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| - name: Download build artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: gradle-build | |
| path: main/build/ | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Build Docker image | |
| run: | | |
| docker build -f main/Dockerfile -t ${{ needs.determine_version.outputs.image_tag }} main | |
| - name: Save Docker image | |
| run: | | |
| docker save ${{ needs.determine_version.outputs.image_tag }} -o main/image.tar | |
| - name: Upload image artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: docker-image | |
| path: main/image.tar | |
| unit_tests: | |
| name: Unit Tests | |
| runs-on: ubuntu-latest | |
| container: gradle:8.14.3-jdk21-alpine | |
| needs: gradle_build | |
| defaults: | |
| run: | |
| working-directory: main | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: gradle-build | |
| path: main/build/ | |
| - run: chmod +x ./gradlew | |
| - run: ./gradlew test | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: unit-test-results | |
| path: main/build/test-results/test/ | |
| integration_tests: | |
| name: Integration Tests | |
| runs-on: ubuntu-latest | |
| container: gradle:8.14.3-jdk21-alpine | |
| needs: gradle_build | |
| defaults: | |
| run: | |
| working-directory: main | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: gradle-build | |
| path: main/build/ | |
| - run: chmod +x ./gradlew | |
| - run: ./gradlew integrationTest | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: integration-test-results | |
| path: main/build/test-results/integrationTest/ | |
| e2e_tests: | |
| name: E2E Tests | |
| runs-on: ubuntu-latest | |
| container: gradle:8.14.3-jdk21-alpine | |
| needs: gradle_build | |
| defaults: | |
| run: | |
| working-directory: main | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: gradle-build | |
| path: main/build/ | |
| - run: chmod +x ./gradlew | |
| - run: ./gradlew e2eTest | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: e2e-test-results | |
| path: main/build/test-results/e2eTest/ | |
| cli_check: | |
| name: CLI Check (E2E) | |
| runs-on: ubuntu-latest | |
| needs: [docker_build, determine_version] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: docker-image | |
| path: main/ | |
| - name: Load Docker image | |
| run: docker load -i main/image.tar | |
| - name: Run CLI via Docker image | |
| run: | | |
| # Create the directory first so the GitHub runner owns it natively | |
| mkdir -p ${{ github.workspace }}/main/test/generatedCode | |
| docker run --rm \ | |
| -v ${{ github.workspace }}/main/src/test/resources/testCases/e2e:/input \ | |
| -v ${{ github.workspace }}/main/test/generatedCode:/output \ | |
| ${{ needs.determine_version.outputs.image_tag }} \ | |
| swarch2gitlab /input/input1.swarch /output | |
| # Reclaim ownership of the files generated inside by Docker | |
| sudo chown -R $USER:$USER ${{ github.workspace }}/main/test/generatedCode | |
| - name: Show generated files (Debug) | |
| run: ls -la ${{ github.workspace }}/main/test/generatedCode | |
| - name: Run file existence check | |
| run: chmod +x pipeline_tests/fileExistsTest.sh && ./pipeline_tests/fileExistsTest.sh | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: cli-test-output | |
| path: main/test/ | |
| coverage_report: | |
| name: Coverage Report | |
| runs-on: ubuntu-latest | |
| container: gradle:8.14.3-jdk21-alpine | |
| needs: [gradle_build, unit_tests, integration_tests, e2e_tests] | |
| defaults: | |
| run: | |
| working-directory: main | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: gradle-build | |
| path: main/build/ | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: unit-test-results | |
| path: main/build/jacoco/ | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: integration-test-results | |
| path: main/build/jacoco/ | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: e2e-test-results | |
| path: main/build/jacoco/ | |
| - run: chmod +x ./gradlew | |
| - run: ./gradlew unitJacocoTestReport integrationJacocoTestReport e2eJacocoTestReport jacocoTestReport | |
| - run: ls -R build/reports/jacoco/ | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: coverage-report | |
| path: main/build/reports/jacoco/**/html/ | |
| deploy_pages: | |
| name: Upload Coverage to Pages | |
| runs-on: ubuntu-latest | |
| needs: coverage_report | |
| if: github.ref == 'refs/heads/main' && github.event_name == 'push' | |
| permissions: | |
| contents: read | |
| pages: write | |
| id-token: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: coverage-report | |
| path: docs/ # match the GitHub Pages folder | |
| - uses: actions/upload-pages-artifact@v3 | |
| with: | |
| path: docs/ | |
| deploy: | |
| name: Deploy GitHub Pages | |
| runs-on: ubuntu-latest | |
| needs: deploy_pages | |
| if: github.ref == 'refs/heads/main' && github.event_name == 'push' | |
| environment: | |
| name: github-pages | |
| permissions: | |
| pages: write | |
| id-token: write | |
| steps: | |
| - uses: actions/deploy-pages@v4 | |
| push_image: | |
| name: Push Docker Image | |
| runs-on: ubuntu-latest | |
| needs: [docker_build, determine_version, unit_tests, integration_tests, e2e_tests, cli_check, coverage_report] | |
| if: github.event_name == 'push' || github.event_name == 'workflow_call' | |
| permissions: | |
| contents: read | |
| packages: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| name: docker-image | |
| path: main/ | |
| - run: docker load -i main/image.tar | |
| - name: Login to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Push Docker image | |
| run: | | |
| docker push ${{ needs.determine_version.outputs.image_tag }} |