updated wiki link #2
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: CI | |
| on: | |
| push: | |
| branches: ["main"] | |
| pull_request: | |
| branches: ["main"] | |
| jobs: | |
| build-test: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Temurin JDK | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: temurin | |
| java-version: "17" | |
| - name: Compile sources | |
| run: | | |
| mkdir -p build/classes | |
| find src -name '*.java' > sources.txt | |
| javac -d build/classes @sources.txt | |
| - name: Package console jar | |
| run: | | |
| jar --create --file build/banking-console.jar --main-class banking.BankingApplication -C build/classes . | |
| - name: Package API jar | |
| run: | | |
| jar --create --file build/banking-api.jar --main-class banking.api.ApiApplication -C build/classes . | |
| - name: Run migration script | |
| env: | |
| BANKING_DATA_PATH: ${{ github.workspace }}/tmp/data/banking_state.properties | |
| run: | | |
| mkdir -p tmp/data | |
| bash deploy/scripts/run-migrations.sh | |
| - name: Run persistence smoke test | |
| run: java -cp build/classes banking.test.PersistenceSmokeTest | |
| - name: Check Docker registry availability | |
| id: docker_registry | |
| run: | | |
| set +e | |
| docker manifest inspect eclipse-temurin:17-jdk >/dev/null 2>&1 | |
| status=$? | |
| set -e | |
| if [ "$status" -eq 0 ]; then | |
| echo "available=true" >> "$GITHUB_OUTPUT" | |
| echo "Docker registry reachable; enabling container checks." | |
| else | |
| echo "available=false" >> "$GITHUB_OUTPUT" | |
| echo "Docker registry unreachable (status ${status}); skipping container checks." >&2 | |
| fi | |
| - name: Build console container image | |
| if: steps.docker_registry.outputs.available == 'true' | |
| run: docker build -f deploy/Dockerfile.console -t banking-console:ci . | |
| - name: Build API container image | |
| if: steps.docker_registry.outputs.available == 'true' | |
| run: docker build -f deploy/Dockerfile.api -t banking-api:ci . | |
| - name: Smoke test API container | |
| if: steps.docker_registry.outputs.available == 'true' | |
| env: | |
| BANKING_DATA_PATH: ${{ github.workspace }}/tmp/data/banking_state.properties | |
| run: | | |
| mkdir -p tmp/data | |
| docker run -d --rm \ | |
| --name banking-api-test \ | |
| -e BANKING_DATA_PATH=/data/banking_state.properties \ | |
| -p 8080:8080 \ | |
| -v "${GITHUB_WORKSPACE}/tmp/data:/data" \ | |
| banking-api:ci | |
| trap 'docker logs banking-api-test; docker rm -f banking-api-test' EXIT | |
| for attempt in {1..10}; do | |
| if curl -fsS http://localhost:8080/healthz > /dev/null; then | |
| break | |
| fi | |
| sleep 3 | |
| done | |
| curl -fsS http://localhost:8080/metrics | |
| curl -fsS http://localhost:8080/accounts | |
| docker rm -f banking-api-test | |
| trap - EXIT | |
| - name: Post-deploy verification | |
| if: steps.docker_registry.outputs.available == 'true' | |
| run: | | |
| test -s tmp/data/banking_state.properties || echo "No snapshot created yet" | |
| echo "Verified container smoke tests" |