Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 49 additions & 5 deletions .github/workflows/ci-pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ on:
permissions:
contents: read
actions: write
statuses: write
Comment on lines 12 to +15


jobs:
Expand Down Expand Up @@ -143,7 +144,18 @@ jobs:
cache: maven

- name: Run tests for ${{ matrix.service }}
run: mvn -B -pl ${{ matrix.service }} -am test
shell: bash
run: |
set -euo pipefail
for attempt in 1 2 3; do
echo "Attempt $attempt: mvn test (${{ matrix.service }})"
if mvn -B -ntp -pl ${{ matrix.service }} -am test; then
exit 0
fi
sleep $((attempt * 10))
done
echo "Maven test failed after retries."
exit 1

- name: Upload test results for ${{ matrix.service }}
if: always()
Expand Down Expand Up @@ -174,7 +186,18 @@ jobs:
cache: maven

- name: Build ${{ matrix.service }}
run: mvn -B -pl ${{ matrix.service }} -am -DskipTests package
shell: bash
run: |
set -euo pipefail
for attempt in 1 2 3; do
echo "Attempt $attempt: mvn package (${{ matrix.service }})"
if mvn -B -ntp -pl ${{ matrix.service }} -am -DskipTests package; then
exit 0
fi
sleep $((attempt * 10))
done
echo "Maven build failed after retries."
exit 1

ci-gate:
name: CI Gate
Expand All @@ -183,21 +206,42 @@ jobs:
if: always()
steps:
- name: Evaluate results
id: gate
shell: bash
run: |
set -euo pipefail

if [[ "${{ needs.detect-changes.outputs.has_services }}" != "true" ]]; then
echo "No Maven module changes detected; passing."
echo "state=success" >> "$GITHUB_OUTPUT"
exit 0
fi

echo "test result: ${{ needs.test.result }}"
echo "build result: ${{ needs.build.result }}"

if [[ "${{ needs.test.result }}" != "success" || "${{ needs.build.result }}" != "success" ]]; then
echo "CI failed."
exit 1
echo "state=failure" >> "$GITHUB_OUTPUT"
exit 0
fi

echo "CI passed."
echo "state=success" >> "$GITHUB_OUTPUT"

- name: Publish CI Gate status
uses: actions/github-script@v7
with:
script: |
const state = '${{ steps.gate.outputs.state }}' || 'failure';
await github.rest.repos.createCommitStatus({
owner: context.repo.owner,
repo: context.repo.repo,
sha: context.sha,
state,
context: 'CI Gate',
description: state === 'success' ? 'CI Gate passed' : 'CI Gate failed',
target_url: `${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`
});
Comment on lines +230 to +243

- name: Fail if gate failed
if: steps.gate.outputs.state != 'success'
run: exit 1
Loading